Как поставить условие для NavigationLink? SWIFTUI

Я хочу поставить условие для NavigationLink.

У 9X_nav меня есть две переменные и NavigationLink, как 9X_swiftui показано ниже.

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

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

Есть ли способ позволить пользователю 9X_swiftui-bug перейти на следующий уровень, если результат 9X_nav больше целевого?

Спасибо.

8
0
2
Общее количество ответов: 2

Ответ #1

Ответ на вопрос: Как поставить условие для NavigationLink? SWIFTUI

Ну, ваш вопрос можно трактовать по-разному 9X_navigation ...

1) если вы хотите не показывать способность 9X_swiftui-bug двигаться дальше, пока количество очков 9X_navigationlink не станет больше этой цели, тогда это

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

2) если 9X_nav вы хотите показать ссылку, но не разрешаете 9X_navigation переход до тех пор, пока условие не станет 9X_navigation истинным, то это будет

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

3) если вы хотите 9X_swiftui-bug автоматически переходить по ссылке, когда 9X_swiftui-bug условие истинно, то возможный вариант - (но обратите внимание - в таком случае вам нужно вручную управлять переходом назад-вперед или запретить назад и т. д. )

  NavigationLink(destination: level2(), isActive: .constant(score > target)) {     
    Text("Next Level")
  }
  • альтернативным вариантом является использование явного состояния для активации

21
0

Ответ #2

Ответ на вопрос: Как поставить условие для NavigationLink? SWIFTUI

Если вы хотите сохранить цвет и отображать 9X_navigationlink предупреждение при нажатии, вы можете использовать 9X_swiftui-bug следующий прием:

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

2
0