#swiftui
Вопрос:
Можете ли вы использовать a NavigationLink
в качестве Menu
элемента a в SwiftUI?
Кажется, что это просто ничего не делает:
Menu {
NavigationLink(destination: Text("test1")) {
Text("item1")
}
NavigationLink(destination: Text("test2")) {
Text("item2")
}
} label: {
Text("open menu")
}
В случае, если предполагается, что это не сработает, как описано выше, существует ли альтернативный способ достижения желаемого результата?
Ответ №1:
NavigationLink
должно быть внутри NavigationView
иерархии. Это Menu
внешний вид навигации, поэтому поместите кнопки внутри меню, которые активируют навигационную ссылку, размещенную внутри вида навигации, например, скрытую в фоновом режиме.
Вот демонстрация возможного подхода (протестирована с Xcode 12.1 / iOS 14.1)
struct DemoNavigateFromMenu: View {
@State private var navigateTo = ""
@State private var isActive = false
var body: some View {
NavigationView {
Menu {
Button("item1") {
self.navigateTo = "test1"
self.isActive = true
}
Button("item2") {
self.navigateTo = "test2"
self.isActive = true
}
} label: {
Text("open menu")
}
.background(
NavigationLink(destination: Text(self.navigateTo), isActive: $isActive) {
EmptyView()
})
}
}
}
Комментарии:
1. Работает просто отлично, я предполагаю, что использование привязки isActive-это (единственный/наилучший) подход для программного перехода к другому представлению в SwiftUI?