SwiftUI NavigationLink:如何在显示目标视图之前调用函数

时间:2020-10-30 01:13:58

标签: ios swiftui swiftui-navigationlink swiftui-navigationview

我想调用一个函数,在之后单击一个项目,然后在之前显示目标视图。

以下代码似乎无效:调用了myFunction,但未显示目标视图。

看起来onTapGesture覆盖了NavigationLink目标。

NavigationView {
    List(restaurants) { restaurant in
        NavigationLink(destination: RestaurantView(restaurant: restaurant)) {
            RestaurantRow(restaurant: restaurant)
        }.onTapGesture { myModel.myFunction(restaurant) }
    }
}

在单击列表项时如何同时拥有两者?

  • 函数称为
  • 显示目的地视图

1 个答案:

答案 0 :(得分:0)

尝试将NavigationLink添加到Button中,例如:

Button(action: {
    //Call here
    myModel.myFunction(restaurant)
}, label: {
    NavigationLink(destination: RestaurantView(restaurant: restaurant)) {
            RestaurantRow(restaurant: restaurant)
    }
})

编辑粘贴的测试代码,请直接尝试

 struct TestNavigationView: View {

    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: Text("Detail").onAppear() {
                    test()
                }) {
                    Text("Click")
                }
            }
        }

    }

    func test() {
        print("Hell0")
    }
}

另一种方法:(如果List在那儿可能不起作用)

struct TestNavigationView: View {

    var body: some View {
        NavigationView {
            VStack {

                NavigationLink(destination: Text("Detail")) {
                    Text("Click")
                }.simultaneousGesture(TapGesture().onEnded{
                    test()
                })

            }
        }

    }

    func test() {
        print("Hell0")
    }
}