【问题标题】:SwiftUI - Present Modal via ContextMenuSwiftUI - 通过 ContextMenu 呈现模态
【发布时间】:2020-02-28 08:56:31
【问题描述】:

我目前正在尝试通过按下上下文菜单中的按钮来呈现模式视图。这可行,但是应该显示模态视图的代码被调用了两次,这是一个问题,因为我正在调用一些网络请求。

这是我目前的演示项目(没有网络内容):

这是应用启动时调用的视图。

struct ContentView: View {
    @State var isModal: Bool = false

    var body: some View {
        Group {
            Text("Main view")
        }.contextMenu {
            Button("Present Detail") { self.isModal = true }.sheet(isPresented: $isModal) {
                DetailView()
            }
        }
    }
}

这是简单的细节视图

struct DetailView: View {
    var body: some View {
        Text("Detail View")
    }
}

因此,如果我在 DetailView() 被实例化的行放置一个断点,我会看到这部分被调用了两次。是否有更好的解决方案来呈现模态视图,而无需多次实例化?

【问题讨论】:

    标签: swift swiftui watchkit apple-watch


    【解决方案1】:

    改为使用

    var body: some View {
        Group {
            Text("Main view")
        }.contextMenu {
            Button("Present Detail") { self.isModal = true }
        }.sheet(isPresented: $isModal) {
            DetailView()
        }
    }
    

    【讨论】:

    • 这不会改变我的情况,DetailView() 也被调用了两次。断点被调用两次。你不也是这样吗?
    • @patrickS,嗯..你是对的。但正如我所见,DetailView.init() 以任何方式被调用了两次,.sheet 被激活。它不依赖于.contextMenu
    • 你能解决这个问题吗?我现在也有同样的问题
    • 嗯.. 刚刚用 Xcode 12.1 / iOS 14.1 重新测试,DetailView.init 只被调用一次。
    猜你喜欢
    • 1970-01-01
    • 2020-01-21
    • 2021-03-15
    • 1970-01-01
    • 2020-11-02
    • 2020-04-16
    • 1970-01-01
    • 2022-01-24
    • 2021-02-08
    相关资源
    最近更新 更多