SwiftUI中如何通过代码触发显示ContextMenu
当然可以实现!SwiftUI虽然没有直接提供一个showContextMenu()的调用方法,但我们可以通过绑定状态变量配合.contextMenu的isPresented参数,轻松手动控制菜单的弹出。
下面是修改后的完整代码,正好贴合你的需求:
struct ContentView: View { // 添加状态变量控制菜单显示 @State private var isContextMenuPresented = false var body: some View { VStack { Text("Tap and hold…") .gesture(TapGesture(count: 2).onEnded({ _ in // 主动触发菜单显示 isContextMenuPresented = true print("Double tapped.") })) } // 绑定状态变量到contextMenu的isPresented参数 .contextMenu(isPresented: $isContextMenuPresented) { Button("Option 1", action: {}) Button("Option 2", action: {}) Button("Option 3", action: {}) } } }
关键说明:
@State private var isContextMenuPresented:这个状态变量负责追踪菜单的显示状态,true表示显示,false表示隐藏.contextMenu(isPresented: $isContextMenuPresented):通过绑定这个状态,我们把菜单的显示控制权从系统的长按手势转移到了自己的代码里- 双击手势的回调中设置
isContextMenuPresented = true:这一步就是主动触发菜单弹出的核心操作
另外,当用户点击菜单选项或者点击空白处关闭菜单时,isContextMenuPresented会自动变回false,不需要我们手动处理,非常省心。
如果需要调整菜单弹出的位置,还可以使用contextMenu(isPresented:attachmentAnchor:)重载方法,自定义菜单的锚点位置,满足更复杂的UI需求。
内容的提问来源于stack exchange,提问作者D. Mika
相关产品推荐
相关产品推荐

