ios 如何摆脱“突出显示”上下文菜单项在PDFView?

wmvff8tz  于 2023-06-07  发布在  iOS
关注(0)|答案(2)|浏览(220)

bounty已结束。回答此问题可获得+100声望奖励。赏金宽限期1小时后结束。Thanh Nguyen正在寻找一个答案从一个有信誉的来源

我使用PDFKit渲染PDF,并使用“UIMenuController”添加了自定义菜单。但它现在从iOS 16开始被弃用。
我删除共享,查找菜单项,代码如下:

@available(iOS 13.0, *)
open override func buildMenu(with builder: UIMenuBuilder) {
    builder.remove(menu: .lookup)
    builder.remove(menu: .share)
    builder.remove(menu: .replace)
    super.buildMenu(with: builder)
}

但是,当用户长按选择PDF中的文本时,“高亮显示”上下文菜单无法删除。有没有办法摆脱这个菜单项?如何在PDFView中使用UIEditMenuInteraction?
任何帮助都将不胜感激。

vxf3dgd4

vxf3dgd41#

使用自iOS 13起可用的UIContextMenuInteraction

import PDFKit

class ViewController: UIViewController, UIContextMenuInteractionDelegate {
    // ...

    override func viewDidLoad() {
        super.viewDidLoad()

        // Set up the UIContextMenuInteraction for your PDFView
        let interaction = UIContextMenuInteraction(delegate: self)
        pdfView.addInteraction(interaction)
    }

    // Implement the UIContextMenuInteractionDelegate method
    func contextMenuInteraction(_ interaction: UIContextMenuInteraction, configurationForMenuAtLocation location: CGPoint) -> UIContextMenuConfiguration? {
        return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { _ in
            // Create an empty UIMenu
            return UIMenu(title: "", children: [])
        }
    }
}
bgibtngc

bgibtngc2#

“Highlight”上下文菜单项是默认UIEditMenuInteraction的一部分,它现在是在PDFView中处理文本选择和编辑的首选方式。要删除“Highlight”菜单项,可以覆盖PDFView的editMenuInteraction属性,并将其menuItems属性设置为空数组。
下面是如何执行此操作的示例:

class MyViewController: UIViewController {

    @IBOutlet weak var pdfView: PDFView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Remove the "Highlight" menu item from the default UIEditMenuInteraction
        pdfView.editMenuInteraction?.menuItems = []
    }
}

这将从上下文菜单中删除“高亮显示”菜单项,当您长按以选择PDF中的文本时,该菜单项会出现。
也可以使用UIEditMenuInteraction将自定义菜单项添加到上下文菜单。为此,可以向UIEditMenuInteraction的menuItems属性添加项。

class MyViewController: UIViewController {

    @IBOutlet weak var pdfView: PDFView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Create a custom menu item
        let myMenuItem = UIMenuItem(title: "My Item", action: #selector(myMenuItemTapped))

        // Add the custom menu item to the default UIEditMenuInteraction
        pdfView.editMenuInteraction?.menuItems.append(myMenuItem)
    }

    @objc func myMenuItemTapped() {
        // Do something when the custom menu item is tapped
    }
}

我希望这对你有帮助!

相关问题