MacOS上的SwiftUI:单击NavigationLink时调用一个函数

时间:2020-05-11 02:45:36

标签: swiftui swiftui-navigationlink

我的需求很简单,但我似乎找不到办法(许多帖子比较复杂,或者对于iOS来说是过时的。

我有一个带有NavigationLink的NavigationView,并且一切正常。由于某些原因,我想知道用户单击的项目,因为该项目用于视图上的其他操作。

我尝试在NavigationView内放置一个按钮,但是只有按钮动作会触发,但是链接不起作用。

我尝试了OnTapGesture-然后该函数会触发但不会传播,因此详细视图永远不会显示。

我想念什么?有什么办法可以做到而又不会太复杂?

ForEach(anArray, id: \.self) { entry in
    NavigationLink(destination: SettingsView(s: entry)
    {
         Text("something")
    }.onTapGesture {print("Hello")}
}

1 个答案:

答案 0 :(得分:1)

这是解决方案,实际上使用一个执行某些操作并激活链接的按钮

通过Xcode 11.5b2测试

   @State private var activatedLink: Int? = nil

   // ... other code

   ForEach(Array(anArray.enumerated()), id: \.element) { (i, entry) in
        Button("something") {
            print(">> some action")

            self.activatedLink = i   // << order might be important !!
        }.background(
            NavigationLink(destination: SettingsView(s: entry), tag: i, selection: $activatedLink) { EmptyView() }
               .buttonStyle(PlainButtonStyle()) // << required !!
        )
   }