Использование NavigationLink в меню (SwiftUI)

Можете ли вы использовать NavigationLink как элемент Menu в swiftUI?

Кажется, ничего не делает:

Menu {
   NavigationLink(destination: Text("test1")) {
       Text("item1")
   }
   NavigationLink(destination: Text("test2")) {
       Text("item2")
   }
} label: {
   Text("open menu")
}

В случае, если это не должно работать, как описано выше, есть ли альтернативный способ достижения желаемого результата?


person lenny    schedule 15.11.2020    source источник


Ответы (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()
                })
        }
    }
}
person Asperi    schedule 15.11.2020
comment
Работает нормально, я предполагаю, что использование привязки isActive - это (единственный / лучший) подход для программного перехода к другому представлению в swiftUI? - person lenny; 15.11.2020