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

如何通过UITapGestureRecognizer在UIView上触发展示UIMenu?

在UIView上通过点击手势触发显示UIMenu的实现方法

要在自定义UIView上通过点击手势唤起UIMenu,只需在你现有代码基础上完善菜单构建与展示逻辑即可,具体步骤如下:

1. 确认点击手势已正确添加

你当前的手势创建与添加代码是正确的,这一步已经完成了给目标视图绑定点击触发的基础:

let privacyTap = UITapGestureRecognizer(target: self, action: #selector(self.editVisibilityPressed(sender:)))
metaInfoStack.addGestureRecognizer(privacyTap)

2. 完善手势响应方法,构建并展示UIMenu

在editVisibilityPressed方法中,需要创建具体的菜单项(UIAction)、组装成UIMenu,最后调用视图的菜单展示方法。完整示例代码如下:

@objc func editVisibilityPressed(sender: UIGestureRecognizer) {
    guard let tapView = sender.view else { return }
    
    // 定义各个菜单项的动作逻辑
    let publicAction = UIAction(title: "公开", image: UIImage(systemName: "globe")) { _ in
        // 替换为你的实际业务逻辑
        print("内容已设为公开")
    }
    
    let privateAction = UIAction(title: "私密", image: UIImage(systemName: "lock")) { _ in
        print("内容已设为私密")
    }
    
    let friendsOnlyAction = UIAction(title: "仅好友可见", image: UIImage(systemName: "person.2")) { _ in
        print("内容已设为仅好友可见")
    }
    
    // 组装UIMenu,可设置菜单标题
    let menu = UIMenu(title: "设置可见范围", children: [publicAction, privateAction, friendsOnlyAction])
    
    // 在点击的视图上展示菜单,传入视图自身作为来源,bounds作为展示区域
    tapView.showMenu(menu, from: tapView, rect: tapView.bounds)
}

关键说明

  • 先通过guard let确保触发手势的视图非空,避免空指针异常
  • 每个UIAction对应一个菜单项,可自定义标题、图标和点击后的业务逻辑
  • UIMenu负责整合所有菜单项,支持设置标题、分组等
  • 调用showMenu(_:from:rect:)方法完成菜单展示,参数分别为要展示的菜单、来源视图、菜单锚定的区域

注意:UIMenu相关API仅支持iOS 14及以上版本,请确保项目部署目标不低于iOS 14。

内容的提问来源于stack exchange,提问作者Halpo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:48:13