Files
ReadViewSDK/Sources/RDReaderView/EPUBUI/RDEPUBReaderDelegate.swift
T
shenandshen 6f75b083f7 feat: EPUB 阅读器搜索、选中注释、书签 chrome 状态及大量重构优化
- 新增 RDEPUBReaderSearchCoordinator 与 RDEPUBSelectionState 管理搜索和选中状态
- 新增 BookmarkChromeStateTests、NavigationBackwardTests、SelectionAnnotateTests 等 UI 测试
- 新增多个边界测试 epub 样本(损坏结构、空归档、缺失文件、流式外链验证)
- 重构阅读器 chrome 状态管理,统一 tool bar 与 search bar 交互
- 优化大书分页缓存策略(RDEPUBChapterSummaryDiskCache、RDEPUBPageCountCache)
- 移除废弃的 RDEPUBLocationConverter 和 RDEPUBPageBreakPolicy
- 更新 epub-bridge.js 与 JS bridge 通信协议
- 全面更新现有 UI 测试以适配新的 helper 和状态管理
2026-06-13 22:48:56 +08:00

106 lines
4.9 KiB
Swift

import UIKit
// MARK: - 阅读器委托协议
/// EPUB 阅读器的委托协议
/// 用于向调用方通知阅读器的各种状态变更事件
/// 所有方法均提供默认空实现,调用方可选择性实现感兴趣的方法
public protocol RDEPUBReaderDelegate: AnyObject {
/// 阅读器成功打开书籍时调用
/// - Parameters:
/// - reader: 阅读器控制器
/// - publication: 解析后的出版物对象
func epubReader(_ reader: UIViewController, didOpen publication: RDEPUBPublication)
/// 阅读位置更新时调用(翻页、跳转等)
/// - Parameters:
/// - reader: 阅读器控制器
/// - location: 新的阅读位置
func epubReader(_ reader: UIViewController, didUpdateLocation location: RDEPUBLocation)
/// 阅读器翻到书籍末尾时调用
/// - Parameter reader: 阅读器控制器
func epubReaderDidReachEnd(_ reader: UIViewController)
/// 用户选中文本发生变化时调用
/// - Parameters:
/// - reader: 阅读器控制器
/// - selection: 当前选中文本,nil 表示取消选中
func epubReader(_ reader: UIViewController, didChangeSelection selection: RDEPUBSelection?)
/// 高亮标注列表更新时调用
/// - Parameters:
/// - reader: 阅读器控制器
/// - highlights: 当前所有高亮
func epubReader(_ reader: UIViewController, didUpdateHighlights highlights: [RDEPUBHighlight])
/// 书签列表更新时调用
/// - Parameters:
/// - reader: 阅读器控制器
/// - bookmarks: 当前所有书签
func epubReader(_ reader: UIViewController, didUpdateBookmarks bookmarks: [RDEPUBBookmark])
/// 搜索结果更新时调用
/// - Parameters:
/// - reader: 阅读器控制器
/// - result: 搜索结果摘要,nil 表示无搜索
func epubReader(_ reader: UIViewController, didUpdateSearchResult result: RDEPUBSearchResult?)
/// 当前搜索匹配项变化时调用
/// - Parameters:
/// - reader: 阅读器控制器
/// - match: 当前匹配项,nil 表示无匹配
func epubReader(_ reader: UIViewController, didChangeCurrentSearchMatch match: RDEPUBSearchMatch?)
/// 当前所在目录项更新时调用
/// - Parameters:
/// - reader: 阅读器控制器
/// - item: 当前目录项
func epubReader(_ reader: UIViewController, didUpdateCurrentTableOfContentsItem item: RDEPUBReaderTableOfContentsItem?)
/// 用户点击外部链接时调用
/// - Parameters:
/// - reader: 阅读器控制器
/// - url: 外部链接 URL
func epubReader(_ reader: UIViewController, didActivateExternalLink url: URL)
/// 外部链接打开前的拦截钩子,返回 false 可阻止打开
/// - Parameters:
/// - reader: 阅读器控制器
/// - url: 外部链接 URL
/// - Returns: 是否允许打开该链接
func epubReader(_ reader: UIViewController, shouldOpenExternalURL url: URL) -> Bool
/// 阅读器发生错误时调用
/// - Parameters:
/// - reader: 阅读器控制器
/// - error: 错误对象
func epubReader(_ reader: UIViewController, didFailWithError error: Error)
/// 允许调用方自定义顶部工具栏
/// 在 viewDidLoad 时调用,可在工具栏上添加自定义按钮
/// - Parameters:
/// - reader: 阅读器控制器
/// - topToolView: 顶部工具栏视图
func epubReader(_ reader: UIViewController, configureTopToolView topToolView: RDEPUBReaderTopToolView)
}
// MARK: - 默认空实现
/// 所有委托方法的默认空实现,调用方可只实现需要的方法
public extension RDEPUBReaderDelegate {
func epubReader(_ reader: UIViewController, didOpen publication: RDEPUBPublication) {}
func epubReader(_ reader: UIViewController, didUpdateLocation location: RDEPUBLocation) {}
func epubReaderDidReachEnd(_ reader: UIViewController) {}
func epubReader(_ reader: UIViewController, didChangeSelection selection: RDEPUBSelection?) {}
func epubReader(_ reader: UIViewController, didUpdateHighlights highlights: [RDEPUBHighlight]) {}
func epubReader(_ reader: UIViewController, didUpdateBookmarks bookmarks: [RDEPUBBookmark]) {}
func epubReader(_ reader: UIViewController, didUpdateSearchResult result: RDEPUBSearchResult?) {}
func epubReader(_ reader: UIViewController, didChangeCurrentSearchMatch match: RDEPUBSearchMatch?) {}
func epubReader(_ reader: UIViewController, didUpdateCurrentTableOfContentsItem item: RDEPUBReaderTableOfContentsItem?) {}
func epubReader(_ reader: UIViewController, didActivateExternalLink url: URL) {}
func epubReader(_ reader: UIViewController, shouldOpenExternalURL url: URL) -> Bool { true }
func epubReader(_ reader: UIViewController, didFailWithError error: Error) {}
func epubReader(_ reader: UIViewController, configureTopToolView topToolView: RDEPUBReaderTopToolView) {}
}