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

如何移除PDFView中的「Highlight」上下文菜单项并使用UIEditMenuInteraction?

解决PDFView中移除Highlight菜单项及使用UIEditMenuInteraction的方法

一、移除Highlight上下文菜单项

系统预定义的菜单(比如share、lookup)可以通过buildMenu(with:)直接移除,但PDFKit的Highlight属于内部自定义菜单项,没法通过系统menu identifier直接删除,你可以通过重写canPerformAction(_:withSender:)方法屏蔽它:

class CustomPDFView: PDFView {
    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        // 屏蔽Highlight动作
        if action == #selector(PDFTextSelectionToolbar.toggleHighlight(_:)) {
            return false
        }
        // 保留其他需要的系统动作,也可返回false屏蔽更多项
        return super.canPerformAction(action, withSender: sender)
    }
}

之后用这个自定义的CustomPDFView替代原有的PDFView即可生效。

二、在PDFView中使用UIEditMenuInteraction

如果想完全接管上下文菜单的创建逻辑,推荐使用UIEditMenuInteraction,步骤如下:

  1. 给PDFView添加交互组件:
class CustomPDFView: PDFView {
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupEditMenu()
    }
    
    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setupEditMenu()
    }
    
    private func setupEditMenu() {
        let interaction = UIEditMenuInteraction(delegate: self)
        addInteraction(interaction)
    }
}
  1. 实现UIEditMenuInteractionDelegate协议,自定义菜单内容:
extension CustomPDFView: UIEditMenuInteractionDelegate {
    func editMenuInteraction(_ interaction: UIEditMenuInteraction, menuFor configuration: UIEditMenuConfiguration, suggestedActions: [UIMenuElement]) -> UIMenu? {
        // 过滤掉不需要的系统菜单项
        let filteredActions = suggestedActions.filter { element in
            if let action = element as? UIAction, action.title == "Highlight" {
                return false
            }
            return true
        }
        
        // 添加自定义菜单项示例
        let customAction = UIAction(title: "自定义操作", image: UIImage(systemName: "star")) { _ in
            // 执行自定义逻辑
            print("触发自定义操作")
        }
        
        return UIMenu(title: "", children: filteredActions + [customAction])
    }
}

这种方式不仅能移除Highlight,还能自由增删菜单项,完全替代旧版UIMenuController的方案。

注意:要确保PDFView允许文本选中(默认开启状态),否则菜单交互不会触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:42:48