【问题标题】:SwiftUI NavigationLink: how to call a function before showing destination viewSwiftUI NavigationLink:如何在显示目标视图之前调用函数
【发布时间】:2020-10-30 01:13:58
【问题描述】:

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

下面的代码似乎不起作用:myFunction 被调用,但没有显示目标视图。

看起来onTapGesture 覆盖了NavigationLink 目标。

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

当点击一个列表项时,我怎样才能同时拥有这两者?

  • 函数被调用
  • 目标视图已显示

【问题讨论】:

  • 你能在RestaurantView中调用onAppear中的函数吗?
  • 这是否回答了您的问题:stackoverflow.com/a/58898046/12299030?
  • @Paulw11 谢谢!最终,看起来最好的做法是调用 RestaurantView 的myFunction onAppear。如果你写一个答案,我会把它设置为接受的。

标签: ios swiftui swiftui-navigationlink swiftui-navigationview


【解决方案1】:

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

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

EDIT粘贴测试代码,直接试试

 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")
    }
}

【讨论】:

  • 不幸的是它仍然不起作用。该函数被调用,但未显示目标视图。
  • @DanieleB 我刚刚试过了,你能不能只用Text 替换你的RestaurantViewRestaurantRow 并删除onTapGesture 再试一次?
  • 我也试过了,但是没用。 myFunction 被触发,但未显示目的地
猜你喜欢
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 2020-12-15
  • 2019-12-26
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 2013-05-15
相关资源
最近更新 更多