【问题标题】:Changing text color of NSTextView in Interface Builder won't work在 Interface Builder 中更改 NSTextView 的文本颜色将不起作用
【发布时间】:2010-09-04 16:10:00
【问题描述】:

我可以为 NSTextView 设置背景颜色,也可以设置插入颜色,但是当我尝试更改文本颜色时,它就不起作用了。

我可以在每次插入文本之前以编程方式设置颜色,但我可能做错了,因为 Interface Builder 提供了这个选项。

这是我的检查员的样子:

【问题讨论】:

  • 当我在 IB 中向我的 NSTextView 添加一些文本时,它工作正常。仅当开头没有文字时,颜色才起作用。
  • 您所说的“颜色不起作用”是什么意思?
  • 当我运行应用程序并将一些文本写入 NSTextView 时,颜色是黑色而不是绿色。如果我先在那里写任何文本(在界面生成器中),然后运行它并写,它是绿色的。
  • 5 年后.. 同样的问题.. 有人吗?
  • @FoxNos 可能找到了解决方案/原因/解决方法

标签: cocoa interface-builder


【解决方案1】:

以下是我在下面尝试的方法以及我发现的结果,这些结果使我得出了结论。

  1. (a)添加 NSTextView (b)改变颜色。结果:不起作用

  2. (a)添加 NSTextView (b) 然后更改文本 (c) 按 Enter,因为当我没有按 Enter 时它失败了 (d) 然后更改颜色。结果:有效

如果在Interface-Builder中没有设置NSTextView的text属性,它似乎没有保存文本颜色属性。从而导致应用程序在启动时选择默认颜色。然而,诸如背景颜色和插入颜色之类的其他属性将被保存。这让我认为这是界面生成器中的一个错误。

作为一种解决方法,您可以在文本框中留下一个空白区域并在界面生成器中设置颜色,但这可能对您不利,具体取决于您希望使用 NSTextView 做什么

【讨论】:

  • 我可以确认所有文本属性显然都存在此问题(我想更改字体,而不是字体颜色)。 macOS 10.12.5,Xcode 9b。
【解决方案2】:

据我所见 - 从 (10.10) 开始,当文本未初始化时,appkit 中存在一个错误。这个黑客让我摆脱了麻烦。

NSTextView *tf = 
tf.delegate = self;

- (void)textDidChange:(NSNotification *)aNotification {
    NSLog(@"notificaiton:%@",aNotification);
    NSMTextView *tv = (NSMTextView *)[aNotification object];
    [tv setTextColor:[NSColor whiteColor]];
    [[tv textStorage] setFont:[NSFont systemFontOfSize:30]];
}

【讨论】:

    【解决方案3】:

    NSTextView 从系统范围的字体面板获取它的字体和字体颜色,这是一个全局组件 - 所以在记事本中设置字体颜色,你很可能会发现下次使用它时字体颜色也会应用到 NSTextView .

    您需要覆盖此行为以防止 NSTextView 使用系统字体面板。现在使用深色模式似乎更加困难,因为您应该尝试采用默认的深色/浅色模式字体颜色并控制背景颜色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      相关资源
      最近更新 更多