UITextView with clickable links but no text highlighting UITextView with clickable links but no text highlighting ios ios

UITextView with clickable links but no text highlighting


I am working on the exact same problem and the best I could do was to instantly clear the selection as soon as it is made by adding the following to the UITextView's delegate:

- (void)textViewDidChangeSelection:(UITextView *)textView {    if(!NSEqualRanges(textView.selectedRange, NSMakeRange(0, 0))) {        textView.selectedRange = NSMakeRange(0, 0);    }}

Note the check to prevent recursion. This pretty much addresses the issue because only selection is disabled -- links will still work.

Another tangential issue is that the text view will still become first responder, which you can fix by setting your desired first responder after setting the selected range.

Note: the only visual oddity that remains is that press-and-hold brings up the magnifying glass.


I'm not sure if this works for your particular case, but I had a similar case where I needed the textview links to be clickable but did not want text selection to occur and I was using the textview to present data in a CollectionViewCell.

I simply had to override -canBecomeFirstResponder and return NO.

@interface MYTextView : UITextView@end@implementation MYTextView- (BOOL)canBecomeFirstResponder {    return NO;}@end


As I wrote on the other post, there is another solution I found after few tests.

If you want links active and you don't want selection enabled, you need to edit gestureRecognizers.

For example - there are 3 LongPressGestureRecognizers. One for click on link (minimumPressDuration = 0.12), second for zoom in editable mode (minimumPressDuration = 0.5), third for selection (minimumPressDuration = 0.8). This solution removes LongPressGestureRecognizer for selecting and second for zooming in editing mode.

NSArray *textViewGestureRecognizers = self.captionTextView.gestureRecognizers;NSMutableArray *mutableArrayOfGestureRecognizers = [[NSMutableArray alloc] init];for (UIGestureRecognizer *gestureRecognizer in textViewGestureRecognizers) {    if (![gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) {        [mutableArrayOfGestureRecognizers addObject:gestureRecognizer];    } else {        UILongPressGestureRecognizer *longPressGestureRecognizer = (UILongPressGestureRecognizer *)gestureRecognizer;        if (longPressGestureRecognizer.minimumPressDuration < 0.3) {            [mutableArrayOfGestureRecognizers addObject:gestureRecognizer];        }    }}self.captionTextView.gestureRecognizers = mutableArrayOfGestureRecognizers;

Tested on iOS 9, but it should work on all versions (iOS 7, 8, 9).I hope it helps! :)


matomo