fix: remove duplicate canPerformAction method and merge with existing implementation

- Keep single canPerformAction method that handles both text selection menu and highlight menu
- Check tappedHighlight first, then fall back to text selection logic
- Resolves method override conflict

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
shenlei 2026-07-15 10:16:30 +09:00
parent d56e99a83f
commit 7c16647306

View File

@ -1004,6 +1004,12 @@ private final class PDFDemoPageView: UIView, RDPDFReaderPageInteractable, UIGest
override var canBecomeFirstResponder: Bool { true } override var canBecomeFirstResponder: Bool { true }
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if tappedHighlight != nil {
return action == #selector(rd_copy_highlight(_:))
|| action == #selector(rd_delete_highlight(_:))
|| action == #selector(rd_annotate_highlight(_:))
|| action == #selector(rd_delete_annotation(_:))
}
guard let selection = textLayer.selectedSelection else { return false } guard let selection = textLayer.selectedSelection else { return false }
switch action { switch action {
case #selector(rd_copy(_:)): case #selector(rd_copy(_:)):
@ -1114,16 +1120,6 @@ private final class PDFDemoPageView: UIView, RDPDFReaderPageInteractable, UIGest
menuController.setMenuVisible(true, animated: true) menuController.setMenuVisible(true, animated: true)
} }
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if tappedHighlight != nil {
return action == #selector(rd_copy_highlight(_:))
|| action == #selector(rd_delete_highlight(_:))
|| action == #selector(rd_annotate_highlight(_:))
|| action == #selector(rd_delete_annotation(_:))
}
return super.canPerformAction(action, withSender: sender)
}
@objc private func rd_copy_highlight(_ sender: Any?) { @objc private func rd_copy_highlight(_ sender: Any?) {
guard let highlight = tappedHighlight, guard let highlight = tappedHighlight,
let text = highlight.selectedText?.trimmingCharacters(in: .whitespacesAndNewlines), let text = highlight.selectedText?.trimmingCharacters(in: .whitespacesAndNewlines),