如何通过UITapGestureRecognizer在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
相关产品推荐
相关产品推荐

