Con*_*or 7 macos cocoa objective-c
我正在关注苹果的这个指南,但它并没有真正起作用.
基本上,我正在尝试通过自定义WindowController类向窗口中的NSTextField添加超链接.我能够让超链接处理一些问题:
经过一些实验,我发现最初的字符串格式(例如大小,我点击它之前的字体)是我创建标签的.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
Run Code Online (Sandbox Code Playgroud)
AboutWindowController.h
#import <Cocoa/Cocoa.h>
@interface AboutWindowController : NSWindowController
@property (weak) IBOutlet NSTextField *testLabel;
@end
Run Code Online (Sandbox Code Playgroud)
.xib非常简单:它是一个带有标签的窗口,我将标签正确链接到.h文件(我相信)
谢谢您的帮助.我会尝试定期回来回答任何问题/澄清.编辑:请检查我对bikram答案的评论,以了解我的情况.
您遇到的问题是NSMutableAttributedString
试图强制其格式化并NSTextField
强制其自己的格式化。
我的主 XIB 只有菜单,而我的 windowController XIB 有一个Label NSTextField
。
窗口控制器:
@interface TFTWindowController : NSWindowController
@property (weak) IBOutlet NSTextField *testLabel;
@end
@implementation TFTWindowController
- (id)initWithWindow:(NSWindow *)window
{
self = [super initWithWindow:window];
if (self) {
// Initialization code here.
}
return self;
}
- (void)awakeFromNib {
}
- (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 addAttribute:NSFontAttributeName value:[NSFont fontWithName:@"Helvetica" size:20] range:range];
[attrString endEditing];
[string1 appendAttributedString: attrString];
[self.testLabel setAttributedStringValue:string1];
[self.testLabel setFont:[NSFont fontWithName:@"Helvetica" size:20]];
}
@end
Run Code Online (Sandbox Code Playgroud)
应用程序委托:
@interface TFTAppDelegate : NSObject <NSApplicationDelegate>
@property(nonatomic, strong)TFTWindowController *windowController;
@end
@implementation TFTAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
self.windowController = [[TFTWindowController alloc] initWithWindowNibName:@"TFTWindowController"];
[_windowController showWindow:nil];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1456 次 |
最近记录: |