在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)
}
}
}
}