The*_*eil 6 navigation macos swift swiftui
详见这里(在iOS话题),下面的代码可以用来做SwiftUIView解雇本身:
@Environment(\.presentationMode) var presentationMode
// ...
presentationMode.wrappedValue.dismiss()
Run Code Online (Sandbox Code Playgroud)
但是,这种方法不适用于本机(非 Catalyst)macOSNavigationView设置(如下所示),其中所选视图显示在List.
理想情况下,当这些子视图中的任何一个使用上述内容时,列表将返回到没有选择任何内容(就像它第一次启动时一样);然而,dismiss 函数似乎什么也没做:视图保持完全相同。
这是错误还是预期的 macOS 行为?
是否有另一种方法可以替代?
struct HelpView: View {
var body: some View {
NavigationView {
List {
NavigationLink(destination:
AboutAppView()
) {
Text("About this App")
}
NavigationLink(destination:
Text("Here’s a User Guide")
) {
Text("User Guide")
}
}
}
}
}
struct AboutAppView: View {
@Environment(\.presentationMode) var presentationMode
public var body: some View {
Button(action: {
self.dismissSelf()
}) {
Text("Dismiss Me!")
}
}
private func dismissSelf() {
presentationMode.wrappedValue.dismiss()
}
}
Run Code Online (Sandbox Code Playgroud)
仅供参考:真正的意图是针对不太直接的场景(例如从Alert任务完成时触发);这里的按钮设置只是为了简单起见。
这里的解决方案很简单。不要在需要关闭视图的地方使用导航视图。
\n\n检查Apple给出的示例https://developer.apple.com/tutorials/swiftui/creating-a-macos-app
\n\n如果您需要可关闭的视图,有两种方法。
\n\n以下是 macOS 中使用 SwiftUI 的实现表
\n\nstruct HelpView: View {\n @State private var showModal = false\n var body: some View {\n NavigationView {\n List {\n NavigationLink(destination:\n VStack {\n Button("About"){ self.showModal.toggle() }\n Text("Here\xe2\x80\x99s a User Guide")\n }\n ) {\n Text("User Guide")\n }\n }\n }\n .sheet(isPresented: $showModal) {\n AboutAppView(showModal: self.$showModal)\n }\n }\n}\n\nstruct AboutAppView: View {\n @Binding var showModal: Bool\n public var body: some View {\n Button(action: {\n self.showModal.toggle()\n }) {\n Text("Dismiss Me!")\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n还有第三个选项,使用 ZStack 在 RootView 中创建模态卡并更改不透明度以显示和隐藏动态数据。
\n| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |