微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 swiftui

如何解决在 swiftui

我有一个非常普通的应用程序,带有 TabView。但是,当在其中一个内容视图中发生特定进程时,我想防止用户在该进程完成之前切换选项卡。

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

示例:

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

显然,我希望 View1 仍然允许用户执行某些操作。当 someStateVal 为真时,整个 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)
            }
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。