在swiftui中禁用或忽略TabView上的点击

在swiftui中禁用或忽略TabView上的点击,swiftui,swiftui-tabview,Swiftui,Swiftui Tabview,我有一个非常普通的应用程序,带有选项卡。但是,当某个内容视图中发生特定过程时,我希望阻止用户切换选项卡,直到该过程完成 如果我在选项卡本身上使用disabled属性(使用@State绑定来驱动它),那么整个内容视图似乎已被禁用-点击似乎无法进入主视图上的按钮 例如: struct FooView: View { var body: some View { TabView { View1().tabItem(...) View

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

如果我在
选项卡本身上使用
disabled
属性(使用
@State
绑定来驱动它),那么整个内容视图似乎已被禁用-点击似乎无法进入主视图上的按钮

例如:

struct FooView: View {
    var body: some View {
        TabView {
            View1().tabItem(...)
            View2().tabItem(...)
        }
        .disabled(someStateVal)
    }
}
显然,我希望
View1
仍然允许用户做一些事情。当
someStateVal
为true时,整个
View1
不响应

有没有办法防止基于
someStateVal
更改选项卡


谢谢

我找不到单独禁用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)
            }
        }
    }
}