【问题标题】:How to put a condition to NavigationLink? SWIFTUI如何为 NavigationLink 设置条件?斯威夫特
【发布时间】:2020-06-13 16:13:19
【问题描述】:

我想为 NavigationLink 设置一个条件。

我有两个变量,NavigationLink 如下。

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

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

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

谢谢。

【问题讨论】:

  • 你的意思是,如果 score > target 它会自动打开目的地?

标签: navigation swiftui navigationlink


【解决方案1】:

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

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")
  }
  • 替代方法是使用显式状态进行激活

【讨论】:

  • 我打算做第二个,100% 没问题。谢谢!
  • 第二个唯一的问题是它会把颜色变成灰色
【解决方案2】:

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

NavigationLink(destination: EmptyView()) {
                HStack {
                    Circle()
  }
}
            .contentShape(Rectangle())
            .onTapGesture {
                print("ALERT MAYBE")
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-22
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 2016-02-08
    相关资源
    最近更新 更多