SwiftUI - 通过 ContextMenu 呈现模态
Posted
技术标签:
【中文标题】SwiftUI - 通过 ContextMenu 呈现模态【英文标题】:SwiftUI - Present Modal via 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()
被实例化的行放置一个断点,我会看到这部分被调用了两次。是否有更好的解决方案来呈现模态视图,而无需多次实例化?
【问题讨论】:
【参考方案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
只被调用一次。以上是关于SwiftUI - 通过 ContextMenu 呈现模态的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI:是不是可以使用 ForEach + ContextMenu + if 语句?
删除 SwiftUI 中 NavigationLink 上 ContextMenu 的模糊预览
如何在 SwiftUI 中将 DatePicker 放入 ContextMenu