SwiftUI:检测 NavigationView 后退按钮按下 [英] SwiftUI: detecting the NavigationView back button press
本文介绍了SwiftUI:检测 NavigationView 后退按钮按下的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在 SwiftUI
中,当我在此代码中的 DetailView1
中时,我找不到检测用户何时点击导航视图的默认后退按钮的方法:
In SwiftUI
I couldn't find a way to detect when the user taps on the default back button of the navigation view when I am inside DetailView1
in this code:
struct RootView: View {
@State private var showDetails: Bool = false
var body: some View {
NavigationView {
VStack {
NavigationLink(destination: DetailView1(), isActive: $showDetails) {
Text("show DetailView1")
}
}
.navigationBarTitle("RootView")
}
}
}
struct DetailView1: View {
@State private var showDetails: Bool = false
var body: some View {
NavigationLink(destination: DetailView2(), isActive: $showDetails) {
Text("show DetailView2")
}
.navigationBarTitle("DetailView1")
}
}
struct DetailView2: View {
var body: some View {
Text("")
.navigationBarTitle("DetailView2")
}
}
使用 .onDisappear
不能解决问题,因为它的闭包在视图弹出或新视图被推送时被调用.
Using .onDisappear
doesn't solve the problem as its closure is called when the view is popped off or a new view is pushed.
推荐答案
观察已发布的 showDetails
属性的更好(SwiftUI-ier?)方式:
An even nicer (SwiftUI-ier?) way of observing the published showDetails
property:
struct RootView: View {
class ViewModel: ObservableObject {
@Published var showDetails = false
}
@ObservedObject var viewModel = ViewModel()
var body: some View {
NavigationView {
VStack {
NavigationLink(destination: DetailView1(), isActive: $viewModel.showDetails) {
Text("show DetailView1")
}
}
.navigationBarTitle("RootView")
.onReceive(self.viewModel.$showDetails) { isShowing in
debugPrint(isShowing)
// Maybe do something here?
}
}
}
}
这篇关于SwiftUI:检测 NavigationView 后退按钮按下的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文