SwiftUI ContextMenu - переход в другое представление - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь получить контекстное меню для перехода к другому представлению, используя следующий код

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")
        }
    }
}

NavigationLink в VStack работает как положено и переходит к представлению редактирования, но я хочуиспользовать contextMenu. Хотя контекстное меню отображает изображение, когда я нажимаю на него, оно не переходит к представлению редактирования, а просто отменяет контекстное меню.

Я делаю это в приложении для часов, но не думаю, чтоэто должно иметь значение, есть ли что-то особенное, что я имею отношение к навигации по контекстному меню?

1 Ответ

1 голос
/ 07 октября 2019

Я бы использовал вариант isActive NavigationLink, который вы можете вызвать, установив переменную состояния. 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")
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...