移至destinationView之前如何在NavigationLink中执行操作(例如:print(“ hi”))

时间:2019-07-10 03:12:15

标签: swift firebase swiftui

我试图创建一个想要在导航到另一个视图之前要做的事情的按钮。但是,如果使用“按钮”,则无法导航到另一个视图,如果使用“ NavigationLink”,则除了导航之外什么也不能做。

我在下面添加按钮和导航链接。

我正在尝试使用此按钮进行Firebase身份验证,完成身份验证后,我想导航到另一个视图。

Button(action: {print("Hi")}) {
                Text("Create Account")
                    .font(.system(size: 20))
                    .foregroundColor(Color("GreyLabel0"))              
    }

NavigationLink(destination: WelcomeView()) {
     Text("Create Account")
                    .font(.system(size: 20))
                    .foregroundColor(Color("GreyLabel0"))
}

1 个答案:

答案 0 :(得分:2)

您可以使用 DynamicNavigationDestinationLink 将新视图推送到NavigationView中。这样,您可以以编程方式进行操作,并有机会运行自己的代码。在这种情况下,请打印(“ hi”)。

struct ContentView: View {

    var body: some View {
        NavigationView {
            TopView().navigationBarTitle(Text("Top View"))
        }
    }
}

struct TopView: View {

    let detailView = DynamicNavigationDestinationLink(id: \String.self) { data in
        DetailView(passedData: data)
    }

    var body: some View {
        VStack {
            Button(action: {
                print("hi")
                self.detailView.presentedData?.value = "Tapped!"
            }, label: {
                Text("Present Now!")
            })

        }
    }
}

struct DetailView: View {
    let passedData: String

    var body: some View {
        Text(passedData)
    }
}