在Interface Builder中,我有一个不可编辑的标签(NSTextField
)。标签的内容是使用Cocoa Bindings创建的。绑定的值是NSAttributedString
(使用talue变换器创建)。见图:
值变换器实质上指定了特定字符的字体,按照Markdown格式(即Italic和Bold)。这样String
- > NSAttributedString
。标签attributedStringValue
已正确更改
在UI中选择标签时。字体重置为IB中指定的内容,而不是NSAttributedString
中设置的内容。如果你没有选择文字,那么一切看起来都不错。
点击标签之前:
点击/选择标签后:
NSTextField
进行子类化,但没有真正覆盖,这使我能够在选择文本时禁用任何字体更改。NSTextView
而不是NSTextField
s 答案 0 :(得分:1)
我相信我找到了这个问题的解决方案,根据上面原发帖者的评论,这个问题似乎没有解决。
我有一个可以选择但不可编辑的 NSTextField。文本是通过创建具有字体和文本颜色属性的 NSAttributedString 设置的,并将其传递给 NSTextField 的 setAttributedStringValue
方法。
问题是文本的行距错误,直到我单击一个文本字段,然后单击另一个文本字段,如下面的 GIF 所示。点击完成后,文本显示正确。
在编辑前后检查 NSTextField 的文本属性时,我注意到 NSOriginalFont 设置为 .AppleSystemUIFont 12pt 而不是我的字体,即 Helvetica Neue 11pt。
之前
NSFont = "\"HelveticaNeue 11.00 pt. P [] (0x600000e46400) fobj=0x1040163d0, spc=3.06\"";
NSOriginalFont = "\".AppleSystemUIFont 12.00 pt. P [] (0x600000d8f0f0) fobj=0x10361b1a0, spc=3.39\"";
之后:
NSFont = "\"HelveticaNeue 11.00 pt. P [] (0x600000e46400) fobj=0x1040163d0, spc=3.06\"";
NSOriginalFont = "\"HelveticaNeue 11.00 pt. P [] (0x600000e46400) fobj=0x1040163d0, spc=3.06\"";
我通过设置 NSAttributedString 的字体属性解决了这个问题,不仅是 NSFontAttributeName(即@"NSFont")而且@"NSOriginalFont"。
[controlText removeAttribute:NSFontAttributeName range:(NSMakeRange(0, len))];
[controlText addAttribute:NSFontAttributeName value:font range:(NSMakeRange(0, len))];
[controlText removeAttribute:@"NSOriginalFont" range:(NSMakeRange(0, len))];
[controlText addAttribute:@"NSOriginalFont" value:font range:(NSMakeRange(0, len))];