gpt4 book ai didi

SwiftUI:关闭 macOS NavigationView 中的 View

转载 作者:行者123 更新时间:2023-12-03 09:25:43 25 4
gpt4 key购买 nike

如详细 here (关于 iOS 主题),以下代码可用于制作 SwiftUI View解雇自己:

@Environment(\.presentationMode) var presentationMode
// ...
presentationMode.wrappedValue.dismiss()

但是,这种方法不适用于 native (非 Catalyst)macOS NavigationView设置(如下所示),其中所选 View 显示在 List 旁边。 .

理想情况下,当这些 subview 中的任何一个使用上述内容时,列表将返回到没有选择任何内容(就像它第一次启动时一样);然而,dismiss 函数似乎什么也没做: View 保持完全相同。

这是错误还是预期的 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()
}
}

仅供引用:真正的目的是针对不太直接的场景(例如在完成任务时从 Alert 触发);这里的按钮设置只是为了简单起见。

最佳答案

这里的解决方案很简单。不要在需要关闭 View 的地方使用导航 View 。

查看 Apple https://developer.apple.com/tutorials/swiftui/creating-a-macos-app 给出的示例

如果您需要可关闭的 View ,有 2 种方法。

  • 创建一个新的模态窗口 (This is more complicated)
  • 使用表。

  • 以下是使用 SwiftUI 在 macOS 中实现表单
    struct HelpView: View {
    @State private var showModal = false
    var body: some View {
    NavigationView {
    List {
    NavigationLink(destination:
    VStack {
    Button("About"){ self.showModal.toggle() }
    Text("Here’s a User Guide")
    }
    ) {
    Text("User Guide")
    }
    }
    }
    .sheet(isPresented: $showModal) {
    AboutAppView(showModal: self.$showModal)
    }
    }
    }

    struct AboutAppView: View {
    @Binding var showModal: Bool
    public var body: some View {
    Button(action: {
    self.showModal.toggle()
    }) {
    Text("Dismiss Me!")
    }
    }
    }

    还有第三个选项可以使用 ZStack 在 RootView 中创建模态卡并更改不透明度以显示和隐藏动态数据。

    关于SwiftUI:关闭 macOS NavigationView 中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59361491/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com