繁体   English   中英

在菜单中使用 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在导航视图之外,因此将按钮放在菜单内,以激活放置在导航视图内的导航链接,例如。 隐藏在背景中。

这是可能方法的演示(使用 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")
                    }

有关更多详细信息,请参阅此帖子: https ://developer.apple.com/forums/thread/119583

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM