源码注释: - 为 ~60 个 Swift 文件补充缺失的 doc comment(file header、类型、属性、方法) - 修正 4 处错误注释:翻页模式数量、搜索行为描述、手势识别器描述、悬空文档块 文档维护: - 删除重复文档:WXRead/读书EPUB阅读器实现架构.md(与微信读书版完全一致) - 合并重叠文档:阅读器规划.md → 阅读器功能开发计划.md(单一真值) - 修正过时内容:所有文档中"四种翻页模式"→"三种",移除 horizontalCoverScroll - 更新架构图:补齐 EPUBUI/ReaderController、Paging/、Typesetter/ 等子目录 - 更新 index.md 索引:新增开发计划和架构对比文档引用
33 lines
1.1 KiB
Swift
33 lines
1.1 KiB
Swift
import UIKit
|
||
|
||
/// 可选文本视图,继承自 UITextView。
|
||
/// 替换系统默认的 UIMenuItem 为自定义操作(拷贝、高亮、批注),通过 `onSelectionAction` 回调通知外部。
|
||
final class RDEPUBSelectableTextView: UITextView {
|
||
/// 选择菜单操作回调,当用户选择拷贝、高亮或批注时触发
|
||
var onSelectionAction: ((RDEPUBAnnotationMenuAction) -> Void)?
|
||
|
||
/// 判断指定菜单项是否可执行,仅允许自定义的拷贝、高亮、批注操作
|
||
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
|
||
switch action {
|
||
case #selector(rd_copy(_:)),
|
||
#selector(rd_highlight(_:)),
|
||
#selector(rd_annotate(_:)):
|
||
return selectedRange.location != NSNotFound && selectedRange.length > 0
|
||
default:
|
||
return false
|
||
}
|
||
}
|
||
|
||
@objc func rd_copy(_ sender: Any?) {
|
||
onSelectionAction?(.copy)
|
||
}
|
||
|
||
@objc func rd_highlight(_ sender: Any?) {
|
||
onSelectionAction?(.highlight)
|
||
}
|
||
|
||
@objc func rd_annotate(_ sender: Any?) {
|
||
onSelectionAction?(.annotate)
|
||
}
|
||
}
|