Cocoa NSTextField - 绑定和设置属性

Posted

技术标签:

【中文标题】Cocoa NSTextField - 绑定和设置属性【英文标题】:Cocoa NSTextField - binding and setting attributes 【发布时间】:2015-01-25 20:47:12 【问题描述】: 我有一个带有标签的 xib (TheLabel)... 这是一个 NSTextField。用户无法编辑其文本。 我将它的值绑定到我的控制器类中的 NSString*。 我将它的字体绑定到我的控制器类中的 NSFont*。

我可以在我的控制器类中更改 NSString,我看到它反映在标签中。

我可以在我的控制器类中更改 NSFont,我看到它反映在标签中。

但是……

我这辈子都不知道如何打开和关闭下划线。

如果我调用这个函数...

-(void)setUnderlineType:(NSNumber*)underline

   NSMutableAttributedString* content = [[TheLabel attributedStringValue] mutableCopy];
   [content addAttribute:NSUnderlineStyleAttributeName value:underline range:NSMakeRange(0, content.length)];
   [TheLabel setAttributedStringValue:content];

... 我得到了一个下划线,但是绑定的字体被忽略了,我得到了一些标准字体。从那时起,更改控制器中的 NSFont 对 NSTextField 没有明显影响。

我尝试在添加下划线之前从“内容”中删除属性...删除字体属性...但这也不起作用。

每当我调用此函数时,绑定到 NSTextField 的字体都会被“忽略”,并且我看到标准字体是标准大小。

任何指导将不胜感激。

【问题讨论】:

【参考方案1】:

你需要设置NSFontAttributeName来更新NSAttributedString的字体。

NSFont *font = ...;
NSMutableAttributedString* content = [[theLabel attributedStringValue] mutableCopy];
[content addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, content.length)];
[theLabel setAttributedStringValue:content];

【讨论】:

感谢您的尝试,但不幸的是,这并不能解决问题。当然,当我设置下划线时,我看到文本发生了变化......它有一个下划线和正确的字体,但是后来,当我更改我的控制器“TheFont”时,它应该绑定到控件,绑定不见了,我看到显示的 NSTextField 没有任何变化。我开始认为我需要放弃 ZXIB 绑定,只要字体或下划线需要更改,就总是设置 NSTextField 的属性字符串。

以上是关于Cocoa NSTextField - 绑定和设置属性的主要内容,如果未能解决你的问题,请参考以下文章

使用 Cocoa 填充 PDF - 使用 NSTextField 内容填充 PDF 文本字段?

如何在可可的 nstextfield 上设置字体和颜色?

Cocoa NSTextField 拖放需要子类...真的吗?

更改为等宽数字字体后,Cocoa NSTextField 文本在视图中被截断

COCOA - 如何在NSTextfield中达到最大长度时,文本字段不允许输入文本?

使用 Swift 在 NSTextField 中垂直对齐文本