d2k*_*agw 6 cocoa nstextfield nsattributedstring
我在IB中有一个绑定到控制器的标签(NSTextField).控制器在awakeFromNIB上,将标签的attributedStringValue设置为包含一些彩色文本和一个或两个链接.
当您看到标签时,它包含正确的字符串值,但某些格式会丢失 - 直到您单击标签,并且它会更新为包含正确的格式.
我正在使用此代码来设置值:
[self.testTextField setAllowsEditingTextAttributes:YES];
[self.testTextField setSelectable:YES];
NSMutableAttributedString *linkString = [[NSMutableAttributedString alloc] initWithString:@"hit this "];
[linkString beginEditing];
NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString:@"link"];
NSRange range = NSMakeRange(0, [attrString length]);
[attrString addAttribute:NSLinkAttributeName value:[[NSURL URLWithString:@"http://google.com"] absoluteString] range:range];
[attrString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlinePatternDot] range:range];
[attrString addAttribute:NSForegroundColorAttributeName value:[NSColor blackColor] range:range];
[linkString appendAttributedString:attrString];
[linkString appendAttributedString:[[NSAttributedString alloc] initWithString:@" to search"]];
[linkString addAttribute:NSForegroundColorAttributeName value:[NSColor redColor] range:NSMakeRange(0, [linkString length])];
[linkString endEditing];
[self.testTextField setAttributedStringValue:linkString];
Run Code Online (Sandbox Code Playgroud)
基于此示例,您将看到红色字符串和默认Label字体.然后,当您单击标签时,字体会更改大小和面部,并且链接会神奇地呈现.
关于如何在第一次正确渲染字符串的任何想法?
小智 5
我遇到了同样的问题。我发现的解决方案是在属性字符串上显式设置NSFontAttributeName。我创建了一个与我在IB中为文本字段设置的字体匹配的NSFont对象,并按如下所示设置该属性:
NSFont *font = [NSFont fontWithName:@"Lucida Grande" size:(CGFloat)13.0];
[attrString addAttribute:NSFontAttributeName value:font range:range];
Run Code Online (Sandbox Code Playgroud)
据我所知,这只是 AppKit 的正常怪异之处。
我已经成功地使用此自定义类将文本字段呈现为链接,您只需将其添加到界面生成器中并像平常一样设置其属性字符串值:
DSClickableURLTextField / Swift DSClickableURLTextField分支。
您还可以选择使用NSButton,尽管这更麻烦,而且如果不做额外的工作,您就无法获得手形光标。
| 归档时间: |
|
| 查看次数: |
4609 次 |
| 最近记录: |