SwiftUI 检测 contextMenu 何时打开

Posted

技术标签:

【中文标题】SwiftUI 检测 contextMenu 何时打开【英文标题】:SwiftUI detect when contextMenu is open 【发布时间】:2021-11-09 20:24:22 【问题描述】:

正如标题所说,当任何上下文菜单打开或特定视图的上下文菜单打开时,我有什么方法可以检测到(例如,使用 @State 变量)?

作为一个基本想法,如果它是打开的,我想打印一些东西。这不起作用:

.contextMenu 
   print("open")

这似乎也不起作用:

.contextMenu 
    EmptyView()
    .onAppear 
        print("open")
    

我怎样才能做到这一点?


编辑: 为什么我认为它甚至可以做到,或者至少可以让它看起来有可能:在 Instagram 上,人们只能将单个帖子视为一个正方形。但是长按会打开一个上下文菜单,现在帖子形状不一样了,而且上面还有一个小标题..怎么做呢?他们是否在上下文菜单打开时修改了视图,或者是在隐藏这些细节(真实图像形状 + 图像标题)之前帖子所在的网格视图,但它们已经呈现?

截图:

【问题讨论】:

引用 Instagram 为什么你认为它是标准的上下文菜单,为什么你认为它是 SwiftUI ......你不应该回答 - 只是想想。 【参考方案1】:

一种可能的方法是为此目的使用同时手势,例如

Text("Demo Menu")
    .contextMenu(menuItems: 
        Button("Button") 
    )
    .simultaneousGesture(LongPressGesture(minimumDuration: 0.5).onEnded  _ in
        print("Opened")
    )

使用 Xcode 13.2 / ios 15.2 测试

【讨论】:

从技术上讲,您的示例似乎正在执行我在示例中显示的内容(即打印某些内容),但是我也可以使用 simultaneousGesture 更改上下文菜单中显示的视图吗?跨度>

以上是关于SwiftUI 检测 contextMenu 何时打开的主要内容,如果未能解决你的问题,请参考以下文章

在 SwiftUI 2.0 中检测应用程序何时终止

如何检测 SwiftUI 视图何时被拖过

检测用户何时停止/暂停在 TextField 中写入 - SwiftUI

SwiftUI 检测视图何时不可见(有点视图会消失)并停止发布者

SwiftUI:是不是可以使用 ForEach + ContextMenu + if 语句?

删除 SwiftUI 中 NavigationLink 上 ContextMenu 的模糊预览