SwiftUI - 通过 ContextMenu 弹出模态框

3

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

这是我的演示项目(不包含网络相关内容):

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

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()的那一行设置断点,我会发现这个部分被调用了两次。有没有更好的解决方案来呈现模态视图,而不需要多次实例化?

1个回答

2

请使用以下内容代替

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

这对我的情况没有任何影响,“DetailView()”也被调用了两次。断点被调用了两次。你的情况不是这样吗? - patrickS
@patrickS,嗯... 你说得对。但是从我的角度来看,无论如何激活.sheet,DetailView.init()都会被调用两次。这与.contextMenu无关。 - Asperi
你能解决那个问题吗?我现在也遇到了同样的问题。 - kirkyoyx
嗯..刚用Xcode 12.1 / iOS 14.1重新测试了一下,DetailView.init只被调用了一次。 - Asperi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接