【发布时间】:2017-09-07 12:28:18
【问题描述】:
我正在关注苹果的THIS 指南,但它并没有真正正常工作。
基本上,我正在尝试通过自定义 WindowController 类将超链接添加到 Window 内的 NSTextField。我能够让超链接解决一些问题:
- 当我将鼠标悬停在超链接上时,我得到一个“I bean”(指示您可以选择文本的光标)。我想要一只通常出现在超链接上的手
- 当我单击超链接文本时,它会在我的浏览器中成功打开链接,但随后会更改文本大小和格式(例如,它不再居中,恢复为默认值)。现在,当我将鼠标悬停在它上面时,我得到了手。
经过一些实验,我发现初始字符串格式(例如,我点击之前的大小、字体)是我在其中创建标签的 .xib 文件的格式。点击后,它会变为一些我似乎无法以任何方式影响的默认字体。不过,超链接仍然存在。
以下是部分代码:
AboutWindowController.h
#import "AboutWindowController.h"
@interface AboutWindowController ()
@end
@implementation AboutWindowController
- (id)initWithWindow:(NSWindow *)window
{
self = [super initWithWindow:window];
if (self) {
// Initialization code here.
}
return self;
}
- (void)windowDidLoad
{
[super windowDidLoad];
[self.testLabel setAllowsEditingTextAttributes:YES];
[self.testLabel setSelectable:YES];
NSMutableAttributedString* string1 = [[NSMutableAttributedString alloc] init];
NSString* inString = @"Apple Computer";
NSURL* aURL = [NSURL URLWithString:@"www.google.com"];
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];
[string1 appendAttributedString: attrString];
[self.testLabel setAttributedStringValue:string1];
[self.testLabel setFont:[NSFont fontWithName:@"Helvetica" size:20]];
}
@end
AboutWindowController.h
#import <Cocoa/Cocoa.h>
@interface AboutWindowController : NSWindowController
@property (weak) IBOutlet NSTextField *testLabel;
@end
.xib 非常简单:它是一个带有标签的窗口,我将标签正确链接到 .h 文件(我相信)
感谢您的帮助。我会尝试定期检查以回答任何问题/澄清。编辑:请查看我对 bikram 回答的评论,了解我的情况。
【问题讨论】:
标签: objective-c macos cocoa