Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 推送、分段、召唤、导航以编程方式查看快捷UI_Ios_Xcode_Swiftui_Macos Catalina - Fatal编程技术网

Ios 推送、分段、召唤、导航以编程方式查看快捷UI

Ios 推送、分段、召唤、导航以编程方式查看快捷UI,ios,xcode,swiftui,macos-catalina,Ios,Xcode,Swiftui,Macos Catalina,我试着做最简单的事情。我只想通过编程调用一个新的SwiftUI视图——不是用按钮,而是用代码。我已经阅读了几十篇文章和苹果的文档,但我发现的几乎都与重命名或弃用的代码有关。我发现最接近的是: NavigationLink(destination: NewView(), isActive: $something) { EmptyView() } 但这在Xcode Beta 7中对我不起作用。下面是一个简单的应用程序: struct ContentView: View { @Sta

我试着做最简单的事情。我只想通过编程调用一个新的SwiftUI视图——不是用按钮,而是用代码。我已经阅读了几十篇文章和苹果的文档,但我发现的几乎都与重命名或弃用的代码有关。我发现最接近的是:

NavigationLink(destination: NewView(), isActive: $something) {
    EmptyView()
}
但这在Xcode Beta 7中对我不起作用。下面是一个简单的应用程序:

struct ContentView: View {
    @State private var show = false

    var body: some View {

        VStack {
            Text("This is the ContentView")

            Toggle(isOn: $show) {
                Text("Toggle var show")
            }
            .padding()

            Button(action: {
                self.show = !self.show
            }, label: {
                Text(self.show ? "Off" : "On")
            })
            Text(String(show))

            //this does not work - the ContentView is still shown
            NavigationLink(destination: SecondView(), isActive: $show)
            {
             EmptyView()
            }

            //this does not work - it adds SecondView to ContentView
            //I want a new view here, not an addition
            //to the ContentView()
//            if show {
//                //I want a new view here, not an addition to the ContentView()
//                SecondView()
//            }
        }
    }

}
还有一个极其简单的目的地:

struct SecondView: View {
    var body: some View {
        Text("this is the second view!")
    }
}
我一定错过了一些非常简单的东西。任何指导都将不胜感激。
iOS 13.1、Catalina 19A546d、Xcode 11M392r等几项功能。首先,NavigationLink必须嵌入到NavigationView中才能工作。其次,链接不需要您显示的视图。这应该显示第二个视图。我将留给您更新其他元素

 var body: some View {
    NavigationView{
        VStack {
            Text("This is the ContentView")

            Toggle(isOn: $show) {
                Text("Toggle var show")
            }
            .padding()

            Button(action: {
                self.show = !self.show
            }, label: {
                Text(self.show ? "Off" : "On")
            })
            Text(String(show))

            //this does not work - the ContentView is still shown
            NavigationLink(destination: SecondView()){
            Text("Click to View")}
            Spacer()
//                {
//                    EmptyView()
//                }

            //this does not work - it adds SecondView to ContentView
            //I want a new view here, not an addition
            //to the ContentView()
            //            if show {
            //                //I want a new view here, not an addition to the ContentView()
            //                SecondView()
            //            }
        }
    }
}

谢谢,迈克尔。不幸的是,这仍然不起作用。第二个视图仍显示在ContentView堆栈的末尾。我想我可以做一些帧大小调整来提升ContentView,但实际上,Michael的方法确实有效。我将整个VStack放在NavigationView中,然后在NavigationLink周围添加了第二个NavigationView,因此结果是将第二个视图基本上推到了底部的堆栈中。删除额外的NavigationView后,转换正如预期的那样(除了第一次重复加载的错误)。当您确实希望以编程方式将视图添加到堆栈时,我的错误复制可能非常有用。
NavigationLink
需要位于
NavigationView
中才能工作。研究如何使用隐藏的导航链接以及
isActive
修改器以编程方式推送视图: