无法执行简单的导航以查看和返回SwiftUI导航栏按钮

时间:2019-10-17 04:58:52

标签: xcode swiftui

我正在尝试从一个视图到另一个视图进行简单的SwiftUI导航,然后使用 条形按钮项。我尝试了三种不同的方法来调用新视图。 在主体视图中使用Button可以,但是在导航中使用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()
            }
        }
    }
}

如果我在NavigationBarItems中使用NavigationLink,则会显示SecondView,但是 返回到ContentView时,它崩溃并显示以下错误:“试图弹出视图 不存在的控制器”

如果我在NavigationBarItems中使用Button,则可以过渡到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),Catalina 10.15

2 个答案:

答案 0 :(得分:2)

这对我来说仍然是一个问题,我在弹出窗口(模态)演示中遇到了同样的问题,并通过navigationBarItems中的NavigationLink推送了Second控制器。

这是一个非常严重的错误。正常工作的唯一方法是当NavigationLink位于NavigationView内容而不是NavigationBarItems内部。

这确实是一个突破,因为NavigationBar按钮应该可以那样工作。

答案 1 :(得分:1)

我今天将Xcode更新为11.2时遇到了这个问题。根据{{​​3}},这似乎是与13.2有关的错误。我在仍在运行13.1.2的实际iPhone X上进行了测试,并且在那儿工作正常。