如何使用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{
谢谢你,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
放在俯视图中时,我不知道为什么,但在模式显示中从摄影机视图返回后,按下主页按钮或设置按钮,虚拟视图的外观被调用,模式转换再次发生。