- Ivano Bilenchi (@SoftHardW)
ICTextView is a
UITextView subclass with optimized support for string/regex search and highlighting.
It also features some iOS 7+ specific improvements and bugfixes to the standard
- Support for string literals and regular expression search.
- Match highlighting.
- Highly customizable.
- Doesn't use delegate methods (you can still implement your own).
- Methods to account for
textContainerInsetin iOS 7+.
- Contains workarounds for many known iOS 7+
Supported iOS versions: 4.x and above (match highlighting starting from iOS 5.x).
Supported iOS SDKs: 5.x and above.
Alternatively, you can clone this repo, or even just grab the ICTextView folder and put it somewhere in your project.
ICTextView requires the
QuartzCore framework, so make sure to link against it in your build settings.
It is an ARC only project, meaning you must compile it with ARC enabled (either globally or specifically for every .m source file in the ICTextView folder).
#import "ICTextView.h" and you're ready to go.
See comments in the
#pragma mark - Configuration section of the ICTextView.h header file.
Searches can be performed via the
scrollToMatch: performs regular expression searches, while
scrollToString: searches for string literals.
Both search methods are regex-powered, and therefore make use of
NSRegularExpressionOptions. They both support animation, range restriction, custom end scroll positioning and forward/backward search direction.
If a match is found,
ICTextView highlights a primary match, and starts highlighting other matches while the user scrolls. Searching for the same pattern multiple times automatically matches the next result.
rangeOfFoundString property contains the range of the current search match. You can get the actual string by calling the
resetSearch method lets you restore the search variables to their starting values, effectively resetting the search. Calls to
resetSearch cause the highlights to be deallocated, regardless of the
After this method has been called,
ICTextView stops highlighting results until a new search is performed.
Content insets methods
scrollRectToVisible:animated:consideringInsets:[...] methods let you scroll until a certain range or rect is visible, eventually accounting for content insets.
This was the default behavior for
scrollRangeToVisible: before iOS 7, but it has changed since (possibly because of a bug). These methods support animation and scroll positioning, similarly to the search methods.
The other methods are pretty much self-explanatory. See the
#pragma mark - Misc section of the ICTextView.h header file for further info.
iOS 7 UITextView Bugfixes
Long story short, iOS 7 completely broke
ICTextView contains fixes for some very common issues:
- NSTextContainer bug:
initWithFrame:had an erratic behavior due to an uninitialized or wrong
- Caret bug: the caret didn't consider
textContainerInsetand often went out of the visible area.
- characterRangeAtPoint: bug:
- becomeFirstResponder bug:
UITextViewscrolled to a bogus location when becoming first responder in some circumstances.
These fixes, combined with the custom methods to account for
textContainerInset, should make working with
ICTextView much more bearable than working with the standard
Bugfixes introduced by
ICTextView will be removed (or isolated) as soon as they are fixed by Apple.
ICTextView is available under the MIT license. See the LICENSE file for more info.