Reputation: 4797
I found this little snippet which allows one to create links from text in an NSTextView:
-(void)setHyperlinkWithTextView:(NSTextView*)inTextView
{
// create the attributed string
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] init];
// create the url and use it for our attributed string
NSURL* url = [NSURL URLWithString: @"http://www.apple.com"];
[string appendAttributedString:[NSAttributedString hyperlinkFromString:@"Apple Computer" withURL:url]];
// apply it to the NSTextView's text storage
[[inTextView textStorage] setAttributedString: string];
}
Would it be possible to have the link point to some resource in my application, for example to a specific handler class that is capable of interpreting the links and dispatch to a corresponding view/controller?
Upvotes: 5
Views: 2745
Reputation: 46020
You can handle clicks on the links in your NSTextView
delegate, specifically by implementing the textView:clickedOnLink:atIndex:
method.
If you need to store more information with each link, you can do this by storing an object as a custom attribute of the string with the link:
NSDictionary* attributes = [NSDictionary dictionaryWithObjectsAndKeys:
yourObject, @"YourCustomAttributeName",
@"link", NSLinkAttributeName,
nil];
NSAttributedString* string = [[[NSAttributedString alloc] initWithString:@"Your string" attributes:attributes] autorelease];
Make sure if you're saving the attributed string that you use the NSCoding
protocol and not the RTF methods of NSAttributedString
because RTF cannot store custom attributes.
Upvotes: 7