iOS 16中如何保留「查找所选内容」并移除其他文本选单选项
解决iOS 16 UITextView仅保留「查找所选内容」菜单选项的方法
直接移除.lookup菜单会连带删除「查找所选内容」,因为该选项在iOS 16中被整合到了lookup菜单体系内。正确的做法是保留lookup菜单,但过滤掉不需要的子项:
- 先调用
super.buildMenu确保系统生成完整的菜单结构 - 获取原lookup菜单,筛选出仅对应「查找所选内容」的
UIAction - 重新构建lookup菜单并替换原菜单
示例代码
override func buildMenu(with builder: UIMenuBuilder) { super.buildMenu(with: builder) if #available(iOS 16.0, *) { guard let originalLookupMenu = builder.menu(for: .lookup) else { return } // 仅保留「查找所选内容」对应的Action let filteredActions = originalLookupMenu.children.filter { element in guard let action = element as? UIAction else { return false } return action.identifier == .findSelectedText } // 替换原lookup菜单 let updatedLookupMenu = UIMenu(title: originalLookupMenu.title, children: filteredActions) builder.replace(menu: .lookup, with: updatedLookupMenu) } }
关键说明
UIAction.identifier.findSelectedText是系统内置的「查找所选内容」动作标识符,通过它可以精准定位目标选项- 必须先调用
super.buildMenu,否则无法获取到系统自动生成的lookup菜单实例
内容的提问来源于stack exchange,提问作者Hassan Taleb
相关产品推荐
相关产品推荐

