5

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?

Roger
  • 4,737
  • 4
  • 43
  • 68

1 Answers1

7

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.

Community
  • 1
  • 1
Rob Keniger
  • 45,830
  • 6
  • 101
  • 134