【问题标题】:Unable to set background color of NSButtonCell for NSWindowController that uses an NSToolbar无法为使用 NSToolbar 的 NSWindowController 设置 NSButtonCell 的背景颜色
【发布时间】:2013-07-31 00:03:37
【问题描述】:

通过在 windowDidLoad 中使用以下内容,我已成功更改了大多数 xib 窗口上 NSButtonCells 的背景:

[[self.generalOkButton cell] setBackgroundColor:[NSColor blueColor]];

由于某种原因,当我尝试在我的首选项窗口控制器中执行此操作时(其中包括一个带有 NSViews 的工具栏,根据选择的 ToolbarItem 被换出),任何视图中任何按钮的背景颜色确实不改。

现在我已经逐步完成了代码,并确保代码中的按钮确实有一个引用(通过 IBOutlet),然后我在调用方法更改它之前和之后查看了 backgroundColor。它确实在发生变化,但由于某种原因,该窗口中的任何按钮都没有反映它们的背景发生了变化。

是否有某些原因导致它在 windowDidLoad 中不起作用,因为 NSView 正在被换入和换出 Window?我尝试将设置背景颜色的代码移动到交换视图的方法中,但仍然没有用。

任何想法/建议表示赞赏。谢谢

更新

irc 上的某个人建议我在 KVO 上观察 NSButtonCell 以查看它是否被改回。

我设置了这个,当我设置颜色时我看到了变化,但就是这样。似乎什么都没有再次改变它......但按钮仍然没有以正确的背景颜色显示在屏幕上。

日志:

BGColor was changed: {
    kind = 1;
    new = "NSCalibratedRGBColorSpace 0 0.423529 0.792157 1";
    old = "<null>";
}

更新 2

编写了一个快速示例项目,显示选项卡式按钮颜色行为和非选项卡式按钮颜色行为。它将在限定时间内托管在 Dropbox 上:https://www.dropbox.com/s/nrl71p4yk6iyp4w/TestButtonColor.zip

【问题讨论】:

    标签: objective-c macos background-color nsbutton nsbuttoncell


    【解决方案1】:

    想通了。感谢 freenode 上#macdev 中的人,他们指出不需要我使用的一行代码:

    [self.window.contentView setWantsLayer:YES];
    

    我并没有真正使用图层,所以不需要设置。

    一旦我删除了这个,按钮颜色在那个窗口中就可以正常工作了。注意:他们还说如果我确实需要使用图层,我必须设置按钮图层的背景颜色才能使其工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-04
      • 2014-03-29
      • 2013-01-07
      • 2021-08-09
      • 2015-06-06
      • 2013-12-20
      • 1970-01-01
      • 2016-01-26
      相关资源
      最近更新 更多