Cocoa 使用圆形rect按钮作为带有计数器的徽章

Cocoa 使用圆形rect按钮作为带有计数器的徽章,cocoa,nsoutlineview,nstableviewcell,Cocoa,Nsoutlineview,Nstableviewcell,我将基于视图的NSOutlineView与两个不同的视图一起使用(两个视图都是NSTableCellView的自定义子类)。在顶层视图中,我显示一个带有计数器的徽章。计数器指示较低级别上的条目数。计数器在项目之后实现为圆角矩形按钮 从图像中可以看出,选择单元格时按钮的行为与您预期的不同。我的按钮变成黑色,而在苹果的样品中它变成白色。我已经找到了将按钮的这种特殊行为设置为setHighlightsBy方法的方法: [[self.button cell] setHighlightsBy: 0];

我将基于视图的NSOutlineView与两个不同的视图一起使用(两个视图都是
NSTableCellView
的自定义子类)。在顶层视图中,我显示一个带有计数器的徽章。计数器指示较低级别上的条目数。计数器在项目之后实现为圆角矩形按钮

从图像中可以看出,选择单元格时按钮的行为与您预期的不同。我的按钮变成黑色,而在苹果的样品中它变成白色。我已经找到了将按钮的这种特殊行为设置为
setHighlightsBy
方法的方法:

[[self.button cell] setHighlightsBy: 0];
我在自定义单元格类的
awakeFromNib
方法中使用了上述方法。在相同的
awakeFromNib
中,我还设置了按钮的挡板:

[[self.button cell] setBezelStyle: NSInlineBezelStyle];
挡板样式工作正常,但高亮显示似乎被忽略了

我可以提供更多信息:outline视图使用绑定获取其内容,其突出显示模式设置为“源列表”

为什么我的突出显示被忽略了


您的按钮是在IB中设置的吗(就像在演示项目中一样)?如果是,您是否在属性检查器的控制部分选中了“启用”框?如果我取消选中该框,我会看到您看到的行为。

我找到了所述行为的原因,这要感谢@rdelmar在其回答中提出的建议。使用“参数”绑定检查器将按钮绑定到单元格视图


其中一个设置是“有条件地设置已启用”,该设置已启用,显然会导致自动禁用我的按钮。禁用此设置后,问题将消失

是的,按钮在IB中设置,其“启用”框被选中。检查与否没有任何区别…@罗杰,它确实会对演示项目产生影响——可能是你在代码的其他地方禁用了按钮吗?是的,我检查了演示项目,你是对的。但是,我只在单元格视图上的awakeFromNib方法中引用该按钮。仔细观察,它确实看起来像是被禁用了,就像它没有被选中时被禁用一样。@Roger,如果你点击按钮,它会选择行吗?我这样问是因为只有当按钮被禁用时才会发生这种情况,否则按钮接收的是单击而不是单元格。是的,当我单击按钮时,它会选择行。这个按钮肯定被禁用了。我将NSButton子类化,其实现覆盖setEnabled:。设置断点时,我可以在stacktrace中看到NSEditorBinder正在禁用我的按钮。我不明白为什么。。。