0

所以我试图通过子类化 NSTableCellView 和 cellview 内的 NSTextField 来创建自定义 NSTableView。我正在尝试在initWithFrame:NSTextField 子类(TableTextField)的方法中编写一些初始化代码,但看起来该initWithFrame:方法根本没有被调用,即使我为 NSTableView 创建新行,每行都包含一个实例表文本字段。这是 TableTextField.m 文件中的代码:

#import "TableTextField.h"

@implementation TableTextField

- (id)initWithFrame:(NSRect)frame//This isn't even being called.
{
    self = [super initWithFrame:frame];
    if (self) {
        self.ad = [[NSApplication sharedApplication] delegate];
    }
    return self;
}

- (void)mouseDown:(NSEvent*) theEvent{
    NSLog(@"A");//TEST
    self.ad = [[NSApplication sharedApplication] delegate];//This works. Why isn't it happening in init?
    [self.ad.classViewController addHomeworkItem];
}

@end

我已经能够通过将我需要的代码放入mouseDown:方法中来解决问题,这确实是我唯一需要的,但我觉得每次我需要使用它时重新声明 self.ad 是不好的做法,而不是不仅仅是声明一次并为每次使用访问它,我似乎无法弄清楚为什么initWithFrame:没有被调用。我假设它与初始化 NSTableCellViews 中的对象的方式有关,但我还没有找到真正的解释。欢迎任何有关如何解决此问题的建议,或解释为什么会发生这种情况。谢谢!

这是如何设置 NSTableView 的图像(有 3 行):

4

1 回答 1

2

如果您使用 XIB 文件来布局视图,则调用的初始化方法是initWithCoder:

于 2013-05-25T15:47:14.503 回答