在我的Cocoa应用程序中,我需要为NSTableView创建一个自定义的NSCell。这个NSCell子类包含一个自定义的NSButtonCell来处理点击事件(以及两个或三个NSTextFieldCells用于文本内容)。以下是我代码的简化示例。
@implementation TheCustomCell
- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
// various NSTextFieldCells
NSTextFieldCell *titleCell = [[NSTextFieldCell alloc] init];
....
// my custom NSButtonCell
MyButtonCell *warningCell = [[MyButtonCell alloc] init];
[warningCell setTarget:self];
[warningCell setAction:@selector(testButton:)];
[warningCell drawWithFrame:buttonRect inView:controlView];
}
我卡在这个问题上了:获取这个NSCell内部的Button(更准确地说是NSButtonCell)的最佳/正确方法是什么? "work"的意思是:当单击时触发指定的操作消息并显示备用图像。默认情况下,单击按钮不会产生任何效果。
关于这个主题的信息/读物很难找到。我在网上找到的唯一帖子指向实现
- (BOOL)trackMouse:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView *)controlView untilMouseUp:(BOOL)untilMouseUp;
这样做是否正确?实现 trackMouse: 在我的包含 NSCell 中?然后将事件转发给 NSButtonCell?当它被点击时,我本来期望 NSButtonCell 自己知道该怎么做(我看到 trackMouse: 方法更多地是与跟踪鼠标移动有关,而不是作为“标准”点击行为的训练轮)。但似乎当它包含在一个单元格中时并没有这样做...... 似乎我还没有完全理解自定义单元格的整体情况;-)
如果有人能够根据自己的经验回答这个问题(或者指向一些教程之类的东西),并告诉我是否正确,我会很高兴的。
提前感谢, Tobi