Giter Club home page Giter Club logo

ictextview's Introduction

ICTextView

Screenshot

Authors

Description

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 UITextView.

Features

  • 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 contentInset and textContainerInset in iOS 7+.
  • Contains workarounds for many known iOS 7+ UITextView bugs.

Compatibility

Supported iOS versions: 4.x and above (match highlighting starting from iOS 5.x).

Supported iOS SDKs: 5.x and above.

Installation

ICTextView can be installed via Cocoapods (just add pod 'ICTextView' to your Podfile, then run pod install) or as a Git submodule.

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.

Configuration

See comments in the #pragma mark - Configuration section of the ICTextView.h header file.

Usage

Search

Searches can be performed via the scrollToMatch: and scrollToString: methods. 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.

The rangeOfFoundString property contains the range of the current search match. You can get the actual string by calling the foundString method.

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 maxHighlightedMatches property.

After this method has been called, ICTextView stops highlighting results until a new search is performed.

Content insets methods

The scrollRangeToVisible:consideringInsets:[...] and 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 UITextView. ICTextView contains fixes for some very common issues:

  • NSTextContainer bug: UITextView initialized via initWithFrame: had an erratic behavior due to an uninitialized or wrong NSTextContainer.
  • Caret bug: the caret didn't consider contentInset nor textContainerInset and often went out of the visible area.
  • characterRangeAtPoint: bug: characterRangeAtPoint: always returned nil.
  • becomeFirstResponder bug: UITextView scrolled to a bogus location when becoming first responder in some circumstances.

These fixes, combined with the custom methods to account for contentInset and textContainerInset, should make working with ICTextView much more bearable than working with the standard UITextView.

Bugfixes introduced by ICTextView will be removed (or isolated) as soon as they are fixed by Apple.

License

ICTextView is available under the MIT license. See the LICENSE file for more info.

ictextview's People

Contributors

huylenshu avatar ivanobilenchi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ictextview's Issues

cursor position

The cursor position should be in the beginning of the text found so the user can edit quickly

not working with iOS 8 bridged to swift(

Tried demo project on xcode 6 ios 8.1 simulator - works perfectly, but when i try to import .h and .m files to my existing Swift project (with creating a bridge header) - it compiles successfully, but at runtime throws an error:
[UITextView scrollToString:searchOptions:animated:atScrollPosition:]: unrecognized selector sent to instance 0x12d05f400
2014-11-30 22:24:34.125 RTP Helper[1181:193763] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITextView scrollToString:searchOptions:animated:atScrollPosition:]: unrecognized selector sent to instance 0x12d05f400'

How scroll to position?

In 1.1.0 version setContentOffset for this, but in 2.0 version it's not working, always set 0 for y, tested in iOS 9.
I would use the old version, but they do not work correctly in the iOS 9.

How set Y in viewDidload?
Please tell me.

setContentOffset not working correctly.

I save ICTextView scroll position like this:

[[NSUserDefaults standardUserDefaults] setFloat:TextView.contentOffset.y forKey:@"ScrollViewPosition"];

And when file run again, setContentOffset in viewDidLoad like this:

[TextView setContentOffset:CGPointMake(0,[[NSUserDefaults standardUserDefaults] floatForKey:@"ScrollViewPosition"]];

But it does not work, it shows above or under the stored position.

What could be wrong?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.