SwiftUI 选项卡视图显示表

Posted

技术标签:

【中文标题】SwiftUI 选项卡视图显示表【英文标题】:SwiftUI tab view display sheet 【发布时间】:2020-09-28 14:13:39 【问题描述】:

我是 SwiftUI 的新手,我尝试构建一个选项卡栏,其中包含一个选项卡,该选项卡将返回模式(工作表)但不返回视图。在我尝试之后,我发现有时它会起作用,但有时不会。我想在用户关闭模式后将前一个选项卡项设为选定选项卡。但我找不到什么错误。有人向我解释我的代码有什么问题吗?

import SwiftUI
struct ContentView: View 
    @State var isPresenting = false
    @State private var selectedItem = 1
    @State private var oldSelectedItem = 1


    var body: some View 
        TabView(selection: $selectedItem)
            Text("1")
                .tabItem 
                        Image(systemName: "house")
                .tag(1)
            .onAppear 
                self.oldSelectedItem = self.selectedItem
            

            Text("")    // I want this to display the sheet.
                .tabItem  Image(systemName: "plus.circle") 
                .tag(2)
            .onAppear 
                self.isPresenting = true
                self.selectedItem = self.oldSelectedItem

            

            Text("3")
                .tabItem 
                    Image(systemName: "calendar")
                .tag(3)
            .onAppear 
                self.oldSelectedItem = self.selectedItem
            
        
        .sheet(isPresented: $isPresenting) 
            testSheet
        
        .accentColor(Color.orange)

    
    
    var testSheet : some View 
        VStack
            Text("testing")
        
    

【问题讨论】:

【参考方案1】:

我假设你想要这个(使用 Xcode 12 / ios 14 测试)

struct ContentView: View 
    @State var isPresenting = false
    @State private var selectedItem = 1
    @State private var oldSelectedItem = 1


    var body: some View 
        TabView(selection: $selectedItem)
            Text("1")
                .tabItem 
                        Image(systemName: "house")
                .tag(1)

            Text("")    // I want this to display the sheet.
                .tabItem  Image(systemName: "plus.circle") 
                .tag(2)

            Text("3")
                .tabItem 
                    Image(systemName: "calendar")
                .tag(3)
        
     //   .onReceive(Just(selectedItem))  // SwiftUI 1.0 - import Combine for this
        .onChange(of: selectedItem)     // SwiftUI 2.0 track changes
                if 2 == selectedItem 
                self.isPresenting = true
                 else 
                    self.oldSelectedItem = $0
                
            
        .sheet(isPresented: $isPresenting, onDismiss: 
                self.selectedItem = self.oldSelectedItem
            ) 
            testSheet
        
        .accentColor(Color.orange)


    
    var testSheet : some View 
        VStack
            Text("testing")
        
    

【讨论】:

它的工作!太感谢了!我还有一个问题,我可以让第二个视图为空而不是Text("")吗? 哇,唯一正确的答案。其他答案有效,但不是 100%。这工作 100% 感谢

以上是关于SwiftUI 选项卡视图显示表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SwiftUI TabView 更多选项卡来阻止它与我选择的选项卡变量混淆

SwiftUI:输入字段键盘动画导致选项卡视图中的其他视图动画

SwiftUI:我可以向 TabView 添加更多视图,然后是选项卡项吗?

如何在 SwiftUI 中为 WKWebView 创建浏览器选项卡

SwiftUI:再次轻按选定的选项卡时,弹出到根视图

SwiftUI:Tabview,更改选项卡时保持状态