Roger
Roger

Reputation: 4797

Creating an in-app link in NSTextView

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

Answers (1)

Rob Keniger
Rob Keniger

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

Related Questions