gpt4 book ai didi

cocoa - NSTextField 的属性字符串渲染延迟

转载 作者:行者123 更新时间:2023-12-03 16:09:06 28 4
gpt4 key购买 nike

我在 IB 中有一个标签 (NSTextField),它绑定(bind)到 Controller 。 Controller 在 awakeFromNIB 上设置标签的 attributeStringValue 以包含一些彩色文本和一个或两个链接。

当您看到标签时,它包含正确的字符串值,但某些格式会丢失 - 直到您单击标签,它才会更新以包含正确的格式。

我使用此代码来设置值:

[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];

根据此示例,您将看到红色且采用默认标签字体的字符串。然后,当您单击标签时,字体大小和外观会发生变化,并且链接会神奇地呈现。

关于如何让字符串第一次正确渲染有什么想法吗?

最佳答案

我也遇到了同样的问题。我找到的解决方案是在属性字符串上显式设置 NSFontAttributeName 。我创建了一个 NSFont 对象,该对象与我在 IB 中为文本字段设置的字体相匹配,并像这样设置该属性:

NSFont *font = [NSFont fontWithName:@"Lucida Grande" size:(CGFloat)13.0];
[attrString addAttribute:NSFontAttributeName value:font range:range];

关于cocoa - NSTextField 的属性字符串渲染延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8684972/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com