Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do hyperlinks sometimes not show in an NSTextField with an NSAttributedString?

The text I use in an NSTextField is loaded from a file as follows.

NSString *path = [[NSBundle mainBundle] pathForResource:@"Credits"  ofType:@"rtf"];
NSAttributedString *as = [[NSAttributedString alloc] initWithPath:path documentAttributes:NULL];
[creditsLabel setAttributedStringValue:as];
[creditsLabel becomeFirstResponder];

The hyperlinks in the window don't render in blue underline unless I first click somewhere on the NSTextField, as per the two screenshots.

How can I make these hyperlinks always look like hyperlinks?

Here's the RTF:

{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf250
{\fonttbl\f0\fnil\fcharset0 LucidaGrande;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural\pardirnatural

\f0\fs24 \cf0 Copyright \'a9 2009-2010 Fully Functional Software.\
All rights reserved.\
\
BlazingStars is made possible by {\field{\*\fldinst{HYPERLINK "http://www.iterasi.net/openviewer.aspx?sqrlitid=p4mjpt7nl02tyjl08_ctaa"}}{\fldrslt DBPrefsWindowController}}, {\field{\*\fldinst{HYPERLINK "http://mattgemmell.com/source"}}{\fldrslt Image Crop}}, {\field{\*\fldinst{HYPERLINK "http://code.google.com/p/tesseract-ocr/"}}{\fldrslt Tesseract-OCR}}, {\field{\*\fldinst{HYPERLINK "http://andymatuschak.org/articles/2005/12/18/help-with-apple-help"}}{\fldrslt Andy's Help Toolkit}}, and {\field{\*\fldinst{HYPERLINK "http://wafflesoftware.net/shortcut/"}}{\fldrslt Shortcut Recorder}}.\
\
Includes icons from the BlueCons set by {\field{\*\fldinst{HYPERLINK "http://www.mouserunner.com"}}{\fldrslt Ken Saunders}}.}

alt text
(source: pokercopilot.com)

alt text
(source: pokercopilot.com)

like image 655
Steve McLeod Avatar asked Jan 25 '10 11:01

Steve McLeod


1 Answers

You can get the links to look like links by styling them that way in the RTF, but the text field won't handle clicks unless you enable editing text attributes and selecting text. (Source for both claims: QA1487.) I see in your comment on Diederik Hoogenboom's answer that you've already done the last part, so all you need to do now is sprinkle blue and underline throughout the RTF.

Another solution would be to use a text view instead of a text field.

A third solution would be to use DSClickableTextField.

like image 97
Peter Hosey Avatar answered Sep 28 '22 04:09

Peter Hosey