JAH*_*lia 25 ios swift swiftui
当我在此代码SwiftUI
中时,我找不到一种方法来检测用户何时点击导航视图的默认后退按钮DetailView1
:
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")
}
}
Run Code Online (Sandbox Code Playgroud)
使用.onDisappear
并不能解决问题,因为当弹出视图或推送新视图时会调用它的闭包。
Saú*_*ril 22
快速的解决方案是创建一个自定义后退按钮,因为目前框架没有这种可能性。
struct DetailView : View {
@Environment(\.presentationMode) var mode: Binding<PresentationMode>
var body : some View {
Text("Detail View")
.navigationBarBackButtonHidden(true)
.navigationBarItems(leading: Button(action : {
self.mode.wrappedValue.dismiss()
}){
Image(systemName: "arrow.left")
})
}
}
Run Code Online (Sandbox Code Playgroud)
mac*_*ael 12
一旦按下后退按钮,视图就会将 isPresented 设置为 false,因此您可以使用该值的观察者在按下后退按钮时触发代码。假设此视图出现在导航控制器内:
struct MyView: View {
@Environment(\.isPresented) var isPresented
var body: some View {
Rectangle().onChange(of: isPresented) { newValue in
if !newValue {
print("detail view is dismissed")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15946 次 |
最近记录: |