initWtihFrame:在TableCellView中创建时未调用自定义文本字段的方法

时间:2013-05-25 15:07:20

标签: objective-c cocoa nstableview nstextfield nstableviewcell

因此,我尝试通过在单元视图中继承NSTableCellView和NSTextField来创建自定义NSTableView。我试图在initWithFrame:方法中为NSTextField子类(TableTextField)编写一些初始化代码,但看起来initWithFrame:方法根本没有被调用,即使是我为NSTableView创建了新行,每行包含一个TableTextField实例。这是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行):

1 个答案:

答案 0 :(得分:2)

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