FRI*_*DAY 22 ios navigationview swiftui
在SwiftUI,我试图找到一种方法来检测一个视图即将被删除使用默认只有当navigationBackButton。然后执行一些操作。
使用onDisappear(perform:)像viewDidDisappear(_:),动作在另一个视图出现后执行。
或者,我想通过检测何时按下默认值 可以解决上述问题navigationBarBackButton。但我发现没有办法检测到这一点。
是否有任何解决方案可以在另一个视图出现之前执行某些操作?
(我已经知道可以通过创建自定义导航后退按钮来关闭视图来做到这一点)
Asp*_*eri 37
这是对我有用的方法,它不是纯 SwiftUI,但我认为值得发布
用法:
SomeView()
.onDisappear {
print("x Default disappear")
}
.onWillDisappear { // << order does NOT matter
print(">>> going to disappear")
}
Run Code Online (Sandbox Code Playgroud)
代码:
struct WillDisappearHandler: UIViewControllerRepresentable {
func makeCoordinator() -> WillDisappearHandler.Coordinator {
Coordinator(onWillDisappear: onWillDisappear)
}
let onWillDisappear: () -> Void
func makeUIViewController(context: UIViewControllerRepresentableContext<WillDisappearHandler>) -> UIViewController {
context.coordinator
}
func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<WillDisappearHandler>) {
}
typealias UIViewControllerType = UIViewController
class Coordinator: UIViewController {
let onWillDisappear: () -> Void
init(onWillDisappear: @escaping () -> Void) {
self.onWillDisappear = onWillDisappear
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
onWillDisappear()
}
}
}
struct WillDisappearModifier: ViewModifier {
let callback: () -> Void
func body(content: Content) -> some View {
content
.background(WillDisappearHandler(onWillDisappear: callback))
}
}
extension View {
func onWillDisappear(_ perform: @escaping () -> Void) -> some View {
self.modifier(WillDisappearModifier(callback: perform))
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3798 次 |
| 最近记录: |