ICTextView
是一个具有字符串/正则表达式搜索和突出显示优化的 UITextView
子类。
它还包含对标准 UITextView
进行的一些 iOS 7+ 特定的改进和错误修复。
contentInset
和 textContainerInset
。UITextView
错误的解决方案。支持的 iOS 版本: 4.x 及以上(匹配突出显示从 iOS 5.x 开始)。
支持的 iOS SDK: 5.x 及以上。
ICTextView
可以通过 CocoaPods 安装(只需将 pod 'ICTextView'
添加到您的 Podfile,然后运行 pod install
)或作为 Git 子模块。
或者,您可以克隆此仓库,甚至只需获取 ICTextView 目录并将其放在项目中的某个位置。
ICTextView
需要 QuartzCore
框架,因此在您的构建设置中确保将其链接到它。
这是一个 ARC 项目,这意味着您必须启用 ARC(全局或对 ICTextView 目录中的每个 .m 源文件)进行编译。
#import "ICTextView.h"
并且您就绪了。
请参阅 ICTextView.h 标头文件中 #pragma mark - Configuration
部分中的注释。
搜索可以通过 scrollToMatch:
和 scrollToString:
方法来实现。 scrollToMatch:
执行正则表达式搜索,而 scrollToString:
则搜索字符串字面量。
这两种搜索方法都使用了正则表达式,因此利用了 NSRegularExpressionOptions
。它们都支持动画、范围限制、自定义结束滚动定位以及前后向搜索方向。
如果找到匹配项,ICTextView
会突出显示主要匹配项,并且用户滚动时开始突出显示其他匹配项。多次搜索相同模式会自动匹配下一个结果。
rangeOfFoundString
属性包含当前搜索匹配项的范围。您可以通过调用 foundString
方法来获取实际的字符串。
resetSearch
方法可以让您将搜索变量恢复到初始值,从而有效地重置搜索。调用 resetSearch
会导致突出显示被释放,而不考虑 maxHighlightedMatches
属性。
在调用此方法后,ICTextView
将停止突出显示结果,直到执行新的搜索。
scrollRangeToVisible:consideringInsets:[...]
和 scrollRectToVisible:animated:consideringInsets:[...]
方法可以让你滚动到某个特定的范围或矩形位置,并最终考虑到内容偏移量。
在 iOS 7 中,scrollRangeToVisible:
的默认行为是这样的,但从那时起(可能是因为一个错误)已经发生了变化。这些方法和搜索方法类似,都支持动画和滚动定位。
其他方法基本上都是显而易见的。有关更多信息,请参阅 ICTextView.h 的 #pragma mark - Misc
部分。
简而言之,iOS 7 完全破坏了 UITextView
。 ICTextView
包含对一些非常常见问题的修正。
initWithFrame:
初始化的 UITextView
由于未初始化或错误的 NSTextContainer
而表现出不一致的行为。contentInset
或 textContainerInset
,并且经常离开可见区域。characterRangeAtPoint:
总是返回 nil
。UITextView
滚动到了一个无效的位置。这些修正,结合考虑 contentInset
和 textContainerInset
的自定义方法,应该会让使用 ICTextView
比使用标准的 UITextView
更容易忍受。
ICTextView
引入的错误修正将在 Apple 修复它们后立即删除(或将它们隔离)。
ICTextView
在 MIT 许可下提供。有关更多信息,请参阅 LICENSE 文件。