Я пытаюсь сделать простую навигацию 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