6

我想为 NavigationLink 设置一个条件。

我有两个变量,NavigationLink 如下。

  @State var score = 0
  @State var target = 10

NavigationLink(destination: level2()) {     
  Text("Next Level")
 }

如果分数大于目标,有没有办法让用户更上一层楼?

谢谢。

4

2 回答 2

16

好吧,你的问题可以有不同的解释......

1)如果你想在分数完全大于目标之前不显示下一步的能力,那么它是

if score > target { // link will appear to user only when true
  NavigationLink(destination: level2()) {     
    Text("Next Level")
  }
}

2)如果您想显示链接但在条件为真之前不允许导航,那么它是

  NavigationLink(destination: level2()) {     
    Text("Next Level")
  }.disabled(score <= target)

3)如果您想在条件为真时自动导航链接,那么可能的变体是(但请注意 - 在这种情况下,您需要手动操作向后导航,或不允许返回等

  NavigationLink(destination: level2(), isActive: .constant(score > target)) {     
    Text("Next Level")
  }
  • 替代是使用显式状态进行激活
于 2020-03-01T04:32:22.563 回答
2

如果您想在点击时保持颜色并显示一些警报,您可以使用以下技巧:

NavigationLink(destination: EmptyView()) {
                HStack {
                    Circle()
  }
}
            .contentShape(Rectangle())
            .onTapGesture {
                print("ALERT MAYBE")
            }
于 2020-12-16T11:47:48.460 回答