J'essaie d'ajouter un bouton de fermeture à la barre de navigation de la vue présentée modalement. Cependant, après rejet, ma méthode de modèles de vue deinit n'est jamais appelée. J'ai trouvé que le problème est là où il capture les self dans navigationBarItem. Je ne peux pas simplement passer un weak self
in navigationBarItem 's action, car View est une structure, pas une classe. Est-ce un problème valable ou simplement un manque de connaissances?
struct ModalView: View {
@Environment(\.presentationMode) private var presentation: Binding<PresentationMode>
@ObservedObject var viewModel: ViewModel
var body: some View {
NavigationView {
Text("Modal is presented")
.navigationBarItems(leading:
Button(action: {
// works after commenting this line
self.presentation.wrappedValue.dismiss()
}) {
Text("close")
}
)
}
}
}
Ma solution est
.navigationBarItems(
trailing: self.filterButton
)
..........................................
var filterButton: some View {
Button(action: {[weak viewModel] in
viewModel?.showFilter()
},label: {
Image("search-filter-icon").renderingMode(.original)
})
}