Swift 如何在选项卡视图上触发工作表单击
在TabView中单击选项卡时如何显示工作表?internet上的所有示例都使用一个按钮来触发更新,但我希望在用户单击TabView中的一个选项卡时显示工作表 我尝试通过添加.onAppear()在选项卡式视图中更改布尔状态变量,但似乎不起作用Swift 如何在选项卡视图上触发工作表单击,swift,swiftui,Swift,Swiftui,在TabView中单击选项卡时如何显示工作表?internet上的所有示例都使用一个按钮来触发更新,但我希望在用户单击TabView中的一个选项卡时显示工作表 我尝试通过添加.onAppear()在选项卡式视图中更改布尔状态变量,但似乎不起作用 struct ContentView: View { @State var showSheet: Bool = false var body: some View { return TabView {
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。我不想将HomeView替换为SheetView,因为我希望它是一个图纸而不是静态视图。谢谢 这可以通过将状态变量向上移动一个级别并控制
组中的流来实现,尽管这有点老套。在这里,为了简单起见,我将它们移动到应用程序状态
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)
}
}
}
}
}