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!
Use NSMutableAttributedString. NSMutableAttributedString * str = [[NSMutableAttributedString alloc] initWithString:@"Google"]; [str addAttribute: NSLinkAttributeName value: @"http://www.google.com" range: NSMakeRange(0, str. length)]; yourTextView.
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.
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 UITextView
s 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 UITextView
s.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With