2012-12-09 67 views
0

好吧,这看起来应该非常简单,但我来自iOS和我必须缺少一些非常明显的东西。所以我有一个NSButtonCell的自定义子类。如果我在IB中创建一个NSButton并在IB中分配NSButtonCell,它没有问题。以编程方式创建NSButton并设置自定义NSButtonCell

但是,我需要以编程方式创建此按钮。我已经看过几个例子,并且在awakeFromNib中有以下内容,但是,它会在我的自定义按钮单元格下面(我可以告诉我什么时候点击按钮)创建看起来像是常规按钮的东西。

NSButton* button = [[NSButton alloc] initWithFrame:NSMakeRect(100, 100, 60, 30)]; 
CT_CaptureButtonCell* captureCell = [[CT_CaptureButtonCell alloc] init]; 
[button setCell:captureCell]; 
[captureCell release]; 
[self.view addSubview:button]; 

那么,我失去了什么愚蠢的东西/不理解?谢谢。

+0

我还没有明白你想要做什么。按钮会定期出现,当你点击你可以看到按钮单元格。除了看到什么,你可以看到吗? –

+0

出于测试目的,自定义按钮单元格为红色。我看到一个常规的按钮,但是当我按下常规按钮稍微移动时,我可以看到边缘周围的红色单元。我期待着一直看到红色的按钮(这是我在IB中查看时看到的)。 – InfalibleCoinage

回答

0

如果你看看documentation for "setCell:",它指出:

讨论

使用此方法非常小心,因为它可以不可挽回地损害 受影响的控制;具体而言,您应该只在NSControl的子类的初始化程序中使用此方法 。

我读这篇文章的方式是,你应该从来呼唤你“setCell”为“NSButton”子类的init方法。换句话说,编写你自己的NSButton子类(例如“ICButton”,用于InfalibleCoinage),然后将“setCell”调用填充到那里的init方法中。

虽然我们谈到这个话题,但是您正在尝试使用“CT_CaptureButtonCell”完成什么样的大图,并且您可以在不使用自定义按钮单元格的情况下做到这一点?

+0

很好,谢谢。我的子类NSButton和修改如下。但是,它给了我相同的行为。我确实尝试用自定义按钮创建一个笔尖,并且工作正常,但似乎是一种尴尬的方式。 (我使用自定义按钮单元具有依赖于状态的自定义绘图/图形) [代码]( - (ID)initWithFrame:方法(的NSRect)帧 { 自我= [超级initWithFrame:方法帧]; 如果(自) {这里 //初始化代码 [自setCell:[[[CT_CaptureButtonCell页头] INIT]自动释放]; 。} 回归自我; }) 你怎么在评论格式代码??! !?? – InfalibleCoinage

相关问题