当前位置: 首页 > 知识库问答 >
问题:

SwiftUI:在macOS NavigationView中删除视图

锺离逸春
2023-03-14

正如这里(在一个iOS主题上)所详述的,以下代码可用于使SwiftUI 自动关闭:

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

但是,这种方法不适用于本机(不是Catalyst)macOS 设置(如下面所示),其中所选视图显示在 旁边。

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

这是一个bug,还是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()
    }
}

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

共有1个答案

董霖
2023-03-14

这里的解决方法很简单。不要在需要删除视图的地方使用导航视图。

请查看Apple https://developer.Apple.com/tutorials/swiftui/creating-a-macos-app提供的示例

如果你需要可视化的视图,有两种方式。

下面是macOS中SwiftUI的表的含义

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中创建一个模态卡,并将不透明度更改为用动态数据显示和隐藏。

 类似资料:
  • 我想在点击项目时从列表中删除该项目。当我删除其中一个单元格时,所有其余的单元格点击指示器都显示它们也被点击了。 另外,它不会删除它,只是使它暂时不可见。当我重新加载页面时,删除的单元格再次出现在内存中,并且再次可见。

  • 主要内容:基本语法,删除视图删除视图是指删除 MySQL 数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。 基本语法 可以使用 DROP VIEW 语句来删除视图。 语法格式如下: DROP VIEW <视图名1> [ , <视图名2> …] 其中: 指定要删除的视图名。DROP VIEW 语句可以一次删除多个视图,但是必须在每个视图上拥有 DROP 权限。 删除视图 【实例】删除 v_students_

  • 接口说明 删除视角 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/viewpoint/1.0.0/del 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 id string form 是 视角ID 响应字段说明 无 响应成功示例 { "code": 200, "data": "", "m

  • 通过该接口可以删除指定视频的信息,地址为: http://spark.bokecc.com/api/video/delete 需要传递以下参数: 参数 说明 videoid 视频id,不可为空 userid 用户id,不可为空 format 返回格式,xml 或json XML格式的返回信息如下: <?xmlversion="1.0"encoding="UTF-8"?> <result>OK</

  • 点击删除,视频将被彻底删除,无法恢复,也不再占用存储空间。

  • 请求header DELETE /v1/videos/{视频id} Authorization:Bearer {ACCESS TOKEN} Content-Type:application/json 注: 请将上方的{ACCESS TOKEN}替换为您的ACCESS TOKEN 请将"{视频id}"替换您需要获取的视频id 返回 { "result": "success" } 返回参数说明

  • 我试图找出正确的方法,有条件地包括一个视图与swiftui。我不能直接在视图中使用,必须使用堆栈视图才能做到这一点。 这是可行的,但似乎会有更干净的方法。

  • 问题内容: 我正在寻找一种简单的方法,可以一次从一个超级视图中删除所有子视图,而不是一个一个地删除它们。 我缺少什么? 更新 我的应用有一个main 。我必须添加其他不同的视图作为子视图,以便提供一种导航。 因此,当单击按钮“打开”特定页面时,我需要删除所有子视图并添加新的子视图。 更新2-可行的解决方案(OS X) 我猜苹果已经解决了。 现在,它比以往更容易了,只需致电: 问题答案: 编辑:(感