1

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

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

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

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

是否有某些原因为什么它在 windowDidLoad 中不起作用,因为 NSViews 正在换入和换出 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

4

1 回答 1

1

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

[self.window.contentView setWantsLayer:YES];

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

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

于 2013-07-30T20:25:20.097 回答