【问题标题】:Disable or ignore taps on TabView in swiftui在 swiftui 中禁用或忽略 TabView 上的点击
【发布时间】:2021-05-05 15:31:30
【问题描述】:

我有一个非常普通的应用程序,带有 TabView。但是,当某个内容视图中发生特定过程时,我想阻止用户切换选项卡,直到该过程完成。

如果我在TabView 本身上使用disabled 属性(使用@State 绑定来驱动它),那么整个内容视图似乎被禁用-点击似乎没有通过按钮主视图。

例子:

struct FooView: View {
    var body: some View {
        TabView {
            View1().tabItem(...)
            View2().tabItem(...)
        }
        .disabled(someStateVal)
    }
}

显然,我希望View1 仍然允许用户执行操作。当someStateVal 为真时,整个View1 不响应。

有没有办法防止基于someStateVal 更改标签?

谢谢!

【问题讨论】:

    标签: swiftui swiftui-tabview


    【解决方案1】:

    我找不到单独禁用 tabItem 的方法,所以这里是 一个示例想法,直到有人提出更有原则的解决方案。

    诀窍是用一个清晰​​的矩形覆盖标签栏以捕获点击。

    struct ContentView: View {
        @State var isBusy = false
        
        var body: some View {
            ZStack {
                TabView {
                    TestView(isBusy: $isBusy)
                        .tabItem {Image(systemName: "globe")}
                    Text("textview 2")
                        .tabItem {Image(systemName: "info.circle")}
                    Text("textview 3")
                        .tabItem {Image(systemName: "gearshape")}
                }
                VStack {
                    Spacer()
                    if isBusy {
                        Rectangle()
                            .fill(Color.white.opacity(0.001))
                            .frame(width: .infinity, height: 50)
                    }
                }
            }
        }
    }
    
    struct TestView: View {
        @Binding var isBusy: Bool
        
        var body: some View {
            VStack {
                Text("TestView")
                Button(action: {
                    isBusy.toggle()
                }) {
                    Text("Busy \(String(isBusy))").frame(width: 170, height: 70)
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-19
      • 2021-02-15
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      相关资源
      最近更新 更多