SwiftUI ContextMenu 导航到另一个视图

Cod*_*imp 6 swiftui

我正在尝试使用以下代码获取上下文菜单以导航到另一个视图

var body: some View
{
    VStack
    {
        Text(self.event.name).font(.body)
        ...
        Spacer()
        NavigationLink(destination: EditView(event: self.event))
        {
            Image(systemName: "pencil")
        }
    }
    .navigationBarTitle(Text(appName))
    .contextMenu
    {
        NavigationLink(destination: EditView(event: self.event))
        {
            Image(systemName: "pencil")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

NavigationLink该范围内VStack的作品如预期,并导航到编辑的看法,但我想用一个contextMenu。虽然上下文菜单显示图像,但当我点击它时,它不会导航到编辑视图,而是只是取消上下文菜单。

我正在手表应用程序中执行此操作,但不认为这应该有所作为,我与上下文菜单导航有什么特别的关系吗?

小智 4

我将使用isActiveNavigationLink 的变体,您可以通过设置状态变量来触发它。Apple 在此记录了这一点

这种变体NavigationLink非常适合动态/程序导航。

.contextMenu将状态变量设置为 true 并激活NavigationLink. 因为您不希望链接可见,所以将label视图设置为EmptyView

这是一个示例,与您的帖子不完全相同,但希望能清楚地说明这一点。

struct ContentView: View {

    @State private var showEditView = false

    var body: some View {

        NavigationView {
            VStack {
                Text("Long Press Me")
                    .contextMenu {
                        Button(action: {
                            self.showEditView = true
                        }, label: {
                            HStack {
                                Text("Edit")
                                Image(systemName: "pencil")
                            }
                        })
                }
                NavigationLink(destination: Text("Edit Mode View Here"), isActive: $showEditView) {
                    EmptyView()
                }
            }
            .navigationBarTitle("Context Menu")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)