Встраивание гиперссылок в NSTextField и NSTextView
Q: Как я встраиваю гиперссылку в NSTextField или NSTextView?
A: Можно встроить гиперссылку с помощью NSAttributedString. Приписанная строка результанта будет содержать URL, стиль и цвет для дисплея.

Расширение NSAttributedString
Простой способ к фактору это в Вашем приложении должно добавить «категорию» к классу NSAttributedString. Путем добавления дополнительного метода класса для этой категории Вы позволяете другим классам получать преимущества от этой расширенной функции.
Перечисление 1 , Добавляющее категорию к NSAttributedString.
@interface NSAttributedString (Hyperlink) |
+(id)hyperlinkFromString:(NSString*)inString withURL:(NSURL*)aURL; |
@end |
@implementation NSAttributedString (Hyperlink) |
+(id)hyperlinkFromString:(NSString*)inString withURL:(NSURL*)aURL |
{ |
NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString: inString]; |
NSRange range = NSMakeRange(0, [attrString length]); |
[attrString beginEditing]; |
[attrString addAttribute:NSLinkAttributeName value:[aURL absoluteString] range:range]; |
// make the text appear in blue |
[attrString addAttribute:NSForegroundColorAttributeName value:[NSColor blueColor] range:range]; |
// next make the text appear with an underline |
[attrString addAttribute: |
NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSSingleUnderlineStyle] range:range]; |
[attrString endEditing]; |
return [attrString autorelease]; |
} |
@end |
Гиперссылка в NSTextField
Перечисление 2 , Создающее гиперссылку, приписало строку в NSTextField.
-(void)setHyperlinkWithTextField:(NSTextField*)inTextField |
{ |
// both are needed, otherwise hyperlink won't accept mousedown |
[inTextField setAllowsEditingTextAttributes: YES]; |
[inTextField setSelectable: YES]; |
NSURL* url = [NSURL URLWithString:@"http://www.apple.com"]; |
NSMutableAttributedString* string = [[NSMutableAttributedString alloc] init]; |
[string appendAttributedString: [NSAttributedString hyperlinkFromString:@"Apple Computer" withURL:url]]; |
// set the attributed string to the NSTextField |
[inTextField setAttributedStringValue: string]; |
[string release]; |
} |
Как Вы видите, setHyperlinkWithTextField: может находиться в Вашем классе, который можно вызвать от Вашего класса -awakeFromNib или NSDocument's -windowControllerDidLoadNib:, например.
Гиперссылка в NSTextView
Перечисление 3 , Создающее гиперссылку, приписало строку в 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]; |
[string release]; |
} |
Обратите внимание на то, что Перечисление 3 устанавливает приписанную строку немного по-другому для NSTextView. Необходимо установить текст с помощью NSTextStorage объект. NSTextStorage является подклассом NSAttributedString, который является запоминающим устройством для объекта NSTextView.
История версии документа
| Дата | Примечания |
|---|---|
| 05.01.2012 | Удаленные утечки в двух фрагментах кода. |
| 02.10.2006 | Новый документ, показывающий, как приложение Какао может встроить гиперссылку и в использовании NSTextField и в NSTextView NSAttributedString. |