在swiftui闭包中按下UIControl
后退按钮时,是否有办法拦截NavigationBar
事件(或其他事件)?还是使用滑动手势?
我试图深入研究UIViewControllerRepresentable,以了解如何绑定NavigationController
(即UINavigationControllerDelegate
)内的委托方法,并通过UIKit组件中的逻辑将其转换以生成“ didNavigateToPrevious”信号,是由堆栈中的任意一种预期形式的导航(即非切换选项卡)引起的,例如点击后退按钮或滑动手势。
我还尝试在子类UIHostingController上重写didMove(toParent:)
,到目前为止,它根本没有被调用。
然后整洁地提供一个ViewModifier
,它会在调用委托方法时附加要调用的闭包。
我在想一些类似的事情
NotifyingNavigationView {
Text("Hello")
}.didNavigateBackward {
// access environmentObject
}
答案 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")
}
}
}