如何知道NavigationView在SwiftUI中弹出?

时间:2020-05-05 04:10:27

标签: ios swiftui navigationview

当用户点击“后退”按钮时,我们可以获取事件并执行某些操作吗?

我已经尝试过使用onDisappear进行查看,但是不需要孩子消失和父母出现的顺序。因此,我正在寻找挂钩事件的方法。

2 个答案:

答案 0 :(得分:0)

我认为您可以使用isActive并监听绑定中的更改,我知道绑定没有didSet,但是您可以使用此扩展名添加它

extension Binding {
    func didSet(execute: @escaping (Value) ->Void) -> Binding {
        return Binding(
            get: {
                return self.wrappedValue
            },
            set: {
                execute($0)
                self.wrappedValue = $0
            }
        )
    }
}

然后您可以添加状态以监视视图的状态

struct ContentView: View {

    @State isPresented: Bool = false

    var body: some View {
        NavigationView {
             NavigationLink(Text("Follow to a Text"), destination: Text("detail view"), isPresented: $isPresented.didSet{ if !self.isPresented { print("Back Pressed") } })
        }

}

目前,我不知道没有自定义按钮的其他任何方式来做您想做的事

答案 1 :(得分:0)

您可以使用修饰符onDisappear,我不了解您的确切情况,因为您需要返回的确切事件。

struct ContentView: View {
    @State var isPresented: Bool = false

    var destination: some View {
        Text("Detail")
                .onDisappear(perform: {
                    print("On Disappear")
                })
    }

    var body: some View {
        NavigationView {
            NavigationLink(destination: destination, isActive: $isPresented) {
                Text("Main")
            }
        }
    }
}