如何使用SwiftUI TabView执行Instagram应用程序中的中心按钮等模式转换? 导入快捷界面 结构ContentView:View{ @状态变量showmodel=false var body:一些观点{ TabView{ 文本(“主视图”) .tabItem{ VStack{ 图像(系统名称:“房屋”) 文本(“主页”) } } 文本(“虚拟视图”) 奥纳佩尔先生{ self.showmodel=true } .表(显示:self.$showmodel){ 文本(“摄影机视图”) } .tabItem{ VStack{ 图像(系统名称:“摄像头”) 文本(“照相机”) } } 文本(“设置视图”) .tabItem{ VStack{ 图像(系统名:“人”) 文本(“设置”) } } } } } 结构内容视图\u预览:PreviewProvider{ 静态var预览:一些视图{ ContentView() } }

如何使用SwiftUI TabView执行Instagram应用程序中的中心按钮等模式转换? 导入快捷界面 结构ContentView:View{ @状态变量showmodel=false var body:一些观点{ TabView{ 文本(“主视图”) .tabItem{ VStack{ 图像(系统名称:“房屋”) 文本(“主页”) } } 文本(“虚拟视图”) 奥纳佩尔先生{ self.showmodel=true } .表(显示:self.$showmodel){ 文本(“摄影机视图”) } .tabItem{ VStack{ 图像(系统名称:“摄像头”) 文本(“照相机”) } } 文本(“设置视图”) .tabItem{ VStack{ 图像(系统名:“人”) 文本(“设置”) } } } } } 结构内容视图\u预览:PreviewProvider{ 静态var预览:一些视图{ ContentView() } },swiftui,Swiftui,当我用上述代码点击中央摄像头按钮时 已显示“虚拟视图” 调用onAppear并将self.showmodel设置为true 但是,不执行模态转换,并且不能显示“摄影机视图” 使用SwiftUI TabView点击tab按钮时,如何执行模式转换 谢谢你,krjw 最后,我用以下代码解决了这个问题: 导入快捷界面 结构ContentView:View{ @状态变量showmodel=false var body:一些观点{ TabView{ 文本(“主视图”) .tabItem{ VStack{

当我用上述代码点击中央摄像头按钮时

  • 已显示“虚拟视图”
  • 调用onAppear并将self.showmodel设置为true
  • 但是,不执行模态转换,并且不能显示“摄影机视图”
  • 使用SwiftUI TabView点击tab按钮时,如何执行模式转换


    谢谢你,krjw

    最后,我用以下代码解决了这个问题:

    导入快捷界面
    结构ContentView:View{
    @状态变量showmodel=false
    var body:一些观点{
    TabView{
    文本(“主视图”)
    .tabItem{
    VStack{
    图像(系统名称:“房屋”)
    文本(“主页”)
    }
    }
    文本(“虚拟视图”)
    奥纳佩尔先生{
    DispatchQueue.main.async{
    self.showmodel=true
    }
    }
    .表(显示:self.$showmodel){
    文本(“摄影机视图”)
    }
    .tabItem{
    VStack{
    图像(系统名称:“摄像头”)
    文本(“照相机”)
    }
    }
    文本(“设置视图”)
    .tabItem{
    VStack{
    图像(系统名:“人”)
    文本(“设置”)
    }
    }
    }
    }
    }
    
    我在这方面遇到了麻烦,我不知道为什么,但是当我把它放在视图层次结构的最顶层时,
    .sheet
    总是对我最有效。此外,我将调用包装在
    .onAppear
    中,以便在使其工作的主队列(UI)上显式运行:

    struct ContentView: View {
        @State var showModal = false
    
        var body: some View {
            TabView {
                Text("Home View")
                    .tabItem {
                        VStack {
                            Image(systemName: "house")
                            Text("Home")
                        }
                }
    
                Text("Dummy View")
                    .onAppear {
                        print("Hallo")
                        DispatchQueue.main.async {
                            self.showModal = true
                        }
                    }
                    .tabItem {
                        VStack {
                            Image(systemName: "camera")
                            Text("Camera")
                        }
                }
    
                Text("Setting View")
                    .tabItem {
                        VStack {
                            Image(systemName: "person")
                            Text("Setting")
                        }
                }
    
            }
            .sheet(isPresented: self.$showModal) {
                Text("Camera View")
            }
        }
    }
    

    我希望这有帮助

    谢谢你的建议!问题已经解决了。只需执行
    self.showmodel=true
    就可以使用
    DispatchQueue.main.async
    转到主队列。当我将
    工作表
    放在
    虚拟视图
    中,而不是放在俯视图中时,效果更好。当我将
    .sheet
    放在俯视图中时,我不知道为什么,但在模式显示中从
    摄影机视图返回后,按下主页按钮或设置按钮,
    虚拟视图的
    外观被调用,模式转换再次发生。