You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中如何通过代码触发显示ContextMenu

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:28:13