在菜单中使用 NavigationLink (SwiftUI)
Using NavigationLink in Menu (SwiftUI)
你能在 swiftUI 中使用 NavigationLink
作为 Menu
的项目吗?
它似乎什么也没做:
Menu {
NavigationLink(destination: Text("test1")) {
Text("item1")
}
NavigationLink(destination: Text("test2")) {
Text("item2")
}
} label: {
Text("open menu")
}
如果它不能像上面尝试的那样工作,是否有其他方法可以达到预期的结果?
NavigationLink
应该在 NavigationView
层次结构中。 Menu
在导航视图之外,因此将激活导航 link 的按钮放在导航视图内的菜单中,例如。隐藏在后台。
这是一个可能的方法演示(使用 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()
})
}
}
}
我可以说 Asperi 的回答是很好的解决方案。它帮助了很多。但是我们需要一个自定义视图来在目标 属性 中保存一个引用,对吧?不是字符串。
@State var navigateTo: AnyView?
@State var isNavigationActive = false
我们可以持有一个引用 AnyView 类型,然后像这样调用视图:
Menu {
Button {
navigateTo = AnyView(CreateItemView())
isNavigationActive = true
} label: {
Label("Create an Item", systemImage: "doc")
}
Button {
navigateTo = AnyView(CreateItemView())
isNavigationActive = true
} label: {
Label("Create a category", systemImage: "folder")
}
} label: {
Label("Add", systemImage: "plus")
}
有关详细信息,请参阅此 post:
https://developer.apple.com/forums/thread/119583
你能在 swiftUI 中使用 NavigationLink
作为 Menu
的项目吗?
它似乎什么也没做:
Menu {
NavigationLink(destination: Text("test1")) {
Text("item1")
}
NavigationLink(destination: Text("test2")) {
Text("item2")
}
} label: {
Text("open menu")
}
如果它不能像上面尝试的那样工作,是否有其他方法可以达到预期的结果?
NavigationLink
应该在 NavigationView
层次结构中。 Menu
在导航视图之外,因此将激活导航 link 的按钮放在导航视图内的菜单中,例如。隐藏在后台。
这是一个可能的方法演示(使用 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()
})
}
}
}
我可以说 Asperi 的回答是很好的解决方案。它帮助了很多。但是我们需要一个自定义视图来在目标 属性 中保存一个引用,对吧?不是字符串。
@State var navigateTo: AnyView?
@State var isNavigationActive = false
我们可以持有一个引用 AnyView 类型,然后像这样调用视图:
Menu {
Button {
navigateTo = AnyView(CreateItemView())
isNavigationActive = true
} label: {
Label("Create an Item", systemImage: "doc")
}
Button {
navigateTo = AnyView(CreateItemView())
isNavigationActive = true
} label: {
Label("Create a category", systemImage: "folder")
}
} label: {
Label("Add", systemImage: "plus")
}
有关详细信息,请参阅此 post: https://developer.apple.com/forums/thread/119583