Невозможно выполнить простую навигацию для просмотра и возврата кнопки панели навигации SwiftUI - PullRequest
3 голосов
/ 17 октября 2019

Я пытаюсь сделать простую навигацию SwiftUI от одного представления к другому и обратно, используя элемент кнопки панели. Я пробовал три разных подхода к вызову нового взгляда. Использование кнопки в представлении тела работает, но использование NavigationBarItems на панели навигации не выполняется двумя различными способами.

Вот начальный вид:

struct ContentView: View {
    @State private var showSecondView = false
    var body: some View {
        NavigationView {
            VStack {
                Text("This is the content view")
                    .navigationBarTitle("Nav Title")
//this works ONCE only:
                    .navigationBarItems(trailing: Button(action: {self.showSecondView.toggle()}) {
                        Text("SecondView")
                    })
//this always fails on return to contentview with error:
//Tried to pop to a view controller that doesn't exist
//                .navigationBarItems(trailing:
//                    NavigationLink(destination: SecondView()) {
//                        Text("SecondNav")
//                    }
//                )
//This always works:
                Button(action: {self.showSecondView.toggle()} ) {
                    Text("Call Modal Second View")
                }.padding()
                Text(self.showSecondView ? "true" : "false")
            }.sheet(isPresented: $showSecondView) {
                SecondView()
            }
        }
    }
}

Если я использую NavigationLink в NavigationBarItems, SecondView отображается, но при возврате к ContentView происходит сбой с ошибкой: «Попытка всплыть на контроллер представления, который не существует»

Если я использую Button в NavigationBarItems, переходSecondView работает один раз и только один раз. Возврат к ContentView работает, но кнопка больше не работает. Интересно, что если первое действие, предпринятое с помощью кнопки в теле, NavigationBarItem не работает ни разу.

И простой SecondView:

struct SecondView: View {
    @Environment(\.presentationMode) var presentation
    var body: some View {
        NavigationView {
            VStack{
                Text("This is the second view")
                Button(action: { self.presentation.wrappedValue.dismiss()}) {
                    Text("Dismiss Modal")
                }.padding()
            }
        }
    }
}

Я в замешательстве. Любое руководство будет оценено. Xcode 11.2 (11B44), Каталина 10.15

1 Ответ

0 голосов
/ 01 ноября 2019

Я столкнулся с этой проблемой сегодня, когда обновил свой Xcode до 11.2. Согласно этому посту , похоже, ошибка с 13.2. Я проверил его на своем реальном iPhone X, который все еще работает 13.1.2, и там он прекрасно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...