拦截SwiftUI NavigationBar后退按钮按下

时间:2020-06-10 16:24:45

标签: swiftui

在swiftui闭包中按下UIControl后退按钮时,是否有办法拦截NavigationBar事件(或其他事件)?还是使用滑动手势?

我试图深入研究UIViewControllerRepresentable,以了解如何绑定NavigationController(即UINavigationControllerDelegate)内的委托方法,并通过UIKit组件中的逻辑将其转换以生成“ didNavigateToPrevious”信号,是由堆栈中的任意一种预期形式的导航(即切换选项卡)引起的,例如点击后退按钮或滑动手势。

我还尝试在子类UIHostingController上重写didMove(toParent:),到目前为止,它根本没有被调用。

然后整洁地提供一个ViewModifier,它会在调用委托方法时附加要调用的闭包。

我在想一些类似的事情

NotifyingNavigationView {
   Text("Hello")
}.didNavigateBackward {
    // access environmentObject
}

1 个答案:

答案 0 :(得分:0)

import SwiftUI

struct DetailView: View {

    @Environment(\.presentationMode) var presentationMode: Binding

    var body: some View {
        NavigationView {
            VStack {
                Text("Detail View")
            }
        }
        .onAppear(){
            print("Initial value: \(self.presentationMode.wrappedValue.isPresented)")

        }
        .onDisappear() {
            if(self.presentationMode.wrappedValue.isPresented == false) {
                print("You click the back button")
            }

        }
    }
}



struct ContentView: View {
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: DetailView())
                { Text("Go to view 2") }
            }
            .navigationBarTitle("Home")

        }
    }
}