モーダルに表示されるビューのナビゲーションバーに閉じるボタンを追加しようとしています。ただし、閉じた後、私のビューモデルdeinitメソッドが呼び出されることはありません。 navigationBarItemのselfをキャプチャする場所に問題があることがわかりました。 navigationBarItemのアクションでweak self
を渡すだけではできません。Viewはクラスではなく構造体だからです。これは有効な問題ですか、それとも単なる知識不足ですか?
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")
}
)
}
}
}
私の解決策は
.navigationBarItems(
trailing: self.filterButton
)
..........................................
var filterButton: some View {
Button(action: {[weak viewModel] in
viewModel?.showFilter()
},label: {
Image("search-filter-icon").renderingMode(.original)
})
}