SwifUI中的生命周期:离开NavigationView层次结构的子视图时运行代码

时间:2019-09-14 10:40:55

标签: ios lifecycle swiftui ios-navigationview

借助SwiftUI的NavigationView,我们从代码构造的简单性中受益。但是,没有公开,至少在这些早期阶段是重写。此外,由于对视图生命周期管理的关注减少,因此很难根据视图状态找出调用什么内容以及何时调用某些内容。

当用户选择备份NavigationView层次结构时(例如,单击NavigationView提供的后退按钮),我想运行一些代码。

我已经尝试过onDisappear(){}以及其他变种,但我无法使其正常工作。好像没有被调用。 onAppear(){}确实可以正常工作,所以我很困惑。

任何帮助都将得到超级认可!

1 个答案:

答案 0 :(得分:1)

我非常确定,在此阶段,没有可以覆盖的方法来捕获导航视图的“后退”操作。

但是,我确实发现我可以隐藏NavigationView的后退按钮,并自己添加一个自定义按钮,以便在解散孩子之前可以调用该代码。

import SwiftUI

struct SecondView: View {
    var body: some View {


        Text("Second View")
            .navigationBarBackButtonHidden(true)
            .navigationBarItems(leading: NavigationViewCustomBack())
    }


}


==========================

import SwiftUI

struct NavigationViewCustomBack: View {
    var body: some View {
        HStack{
                Image(systemName: "chevron.left").foregroundColor(.blue).font(Font.title.weight(.medium))
                Text("Home").padding(.leading, -5)
            }
    }
}

struct NavigationViewCustomBack_Previews: PreviewProvider {
    static var previews: some View {
        NavigationViewCustomBack()
    }
}