ios - SwiftUI:检测 NavigationView 后退按钮按下

标签 ios swift swiftui

SwiftUI当我在 DetailView1 内时,我找不到检测用户何时点击导航 View 的默认后退按钮的方法。在这段代码中:

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不能解决问题,因为在弹出 View 或推送新 View 时会调用它的闭包。

最佳答案

快速的解决方案是创建一个自定义的后退按钮,因为现在框架没有这种可能性。

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")
            })
    }
}

关于ios - SwiftUI:检测 NavigationView 后退按钮按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61930915/

相关文章:

swift - 在 Swift 中计算行数

ios - `UIPanGestureRecognizer` 在 iOS 中使用 VoiceOver 的用户无法访问

Swift 3 UIwebView 不加载所有 URLS

SwiftUI - 从核心数据 NSSet 中删除 - @FetchRequest with .onDelete()

SwiftUI MacOS 列表的插入填充

ios - Objective C - 移动图像

ios - 应用程序因 SecTrustEvaluate [leaf IssuerCommonName SubjectCommonName] 错误而卡住

ios - ApplyImpulse 对插入物体的力度具有指数效应

ios - 游戏中心分数报告问题

ios - SwiftUI ScrollView 不会将内容与 GeometryReader 居中