我正在尝试创建一个使用嵌入式NSButtonCell对象的自定义范围栏。但是,当鼠标悬停时,我无法绘制挡板。我可以通过创建跟踪区域并在鼠标进入时将showsBorderOnlyWhileMouseInside设置为NO以及在向外移动时将YES设置为YES来实现它,但这对我来说就像是一种黑客攻击,特别是因为NSButtonCell会自行执行跟踪。在自定义控件中嵌入多个NSButtonCell
如果我使用控件的setCell方法,按钮单元格将调用控件的addTrackingRect:owner:userData:assumeInside:并设置自己的跟踪以在鼠标悬停时绘制挡板。但是,如果我想在同一个控件中使用多个按钮单元格,我尝试使用按钮单元格的setControlView方法将每个单元格的controlView设置为自定义控件,但它不会提示单元格设置跟踪区域,例如setCell。
该技术必须是可能的,因为NSMatrix做到了这一点,但在阅读了每个可用的API和论坛之后,我还没有找到一种方法来启动NSButtonCell的跟踪行为,而不使用其控件的setCell方法。我的前额从桌面上跳动而来 - 血淋淋的 - 帮助将不胜感激。
谢谢,德克 - 我完全同意。我认为文档对NSCell的赞誉让我对使用按钮感到内疚。我认为我会追赶鼠洞一段时间,但似乎没有一个令人满意的解决方案来实现这一点。 我试过updateTrackingAreaWithFrame:inView:方法,但它没有做到这一点。当Cocoa用NSButton做这件事时看着堆栈显示了一堆私有API传递,所以它看起来不像我们自己想做的那样。 – 2009-04-20 00:55:31