Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UILabel and NSLinkAttributeName: Link is not clickable

I want to use attributed strings with NSLinkAttributeName to create clickable links inside a UILabel instance within my iOS 7 project, which is now finally possible without using external libraries.

NSURL *url = [NSURL URLWithString:@"http://www.google.com"];  NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:                           url, NSLinkAttributeName, nil]; 

Applying the attribute on a string displays the text as blue & underlined, but nothing happens on click/tap. User interaction is enabled for the label. Does anybody know how to do this? Thanks!

like image 570
max.mustermann Avatar asked Nov 08 '13 08:11

max.mustermann


People also ask

How do you make an attributed string clickable?

Use NSMutableAttributedString. NSMutableAttributedString * str = [[NSMutableAttributedString alloc] initWithString:@"Google"]; [str addAttribute: NSLinkAttributeName value: @"http://www.google.com" range: NSMakeRange(0, str. length)]; yourTextView.

How do I make a label clickable in Swift?

To make UILabel clickable you will need to enable user interaction for it. To enable user interaction for UILabel simply set the isUserInteractionEnabled property to true.


1 Answers

I can answer my own question now: I am using UITextView instead of UILabel now. I have formatted the UITextView to look and behave like my labels and added:

UITextView *textView = [[UITextView alloc] init]; textView.scrollEnabled = NO; textView.editable = NO; textView.textContainer.lineFragmentPadding = 0; textView.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0); textView.delegate = self; 

Don't forget to set the delegate, you have to implement UITextViewDelegate! Now we implement the delegate method:

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)url inRange:(NSRange)characterRange {      return YES; } 

This automatically opens the provided the NSURL-instance from the attributed string in my question on click/tap.

Remember: This works on iOS 7 only, for legacy support you need external libraries

UPDATE:

Making the UITextViews behave just like labels was a total mess in the end and i stumbled upon some hideous iOS-behaviours. I ended up using the TTTAttributedLabel library which is simply great and allowed me to use labels instead of UITextViews.

like image 175
max.mustermann Avatar answered Sep 17 '22 16:09

max.mustermann