当我单击TabView中的选项卡时如何显示工作表?互联网上的所有示例都使用一个Button来触发更新,但是我想让该表在用户单击TabView中的一个标签时显示。
我尝试通过添加.onAppear()在选项卡式视图中更改布尔状态变量,但这似乎不起作用。
struct ContentView: View {
@State var showSheet: Bool = false
var body: some View {
return TabView {
HomeView()
.tabItem {
Image(systemName: "house")
}
}
.sheet(isPresented: self.$showSheet) {
SheetView(isShown: self.$showSheet)
}
}
}
在上面的示例中,我基本上希望在单击选项卡时显示SheetView。我不想用SheetView替换HomeView,因为我希望它是一个工作表而不是静态视图。谢谢!
答案 0 :(得分:0)
这可以通过将State变量上移并控制Group
内的流来实现,尽管相当骇人。在这里,为了简单起见,我只是将它们移至应用程序状态。
final class AppState: ObservableObject {
@Published var shouldShowActionSheet: Bool = true
@Published var selectedContentViewTab: ContentViewTabs = .none
}
在SceneDelegate.swift
中:
. . .
window.rootViewController = UIHostingController(rootView: contentView.environmentObject(AppState()))
. . .
最后在您看来:
public enum ContentViewTabs: Hashable {
case none
case home
}
struct ContentView: View {
@EnvironmentObject var appState: AppState
var body: some View {
Group {
if (appState.selectedContentViewTab == .home && self.appState.shouldShowActionSheet) {
Text("").sheet(isPresented: self.$appState.shouldShowActionSheet, onDismiss: {
self.appState.shouldShowActionSheet.toggle()
self.appState.selectedContentViewTab = .none
}, content: {
Text("Oll Korrect, Chaps!")
})
} else {
TabView(selection: self.$appState.selectedContentViewTab) {
Text("First View")
.font(.title)
.tabItem {
VStack {
Image("first")
Text("First")
}
}.tag(ContentViewTabs.home)
}
}
}
}
}