0

Итак, я пытаюсь создать пользовательский NSTableView, подклассифицируя NSTableCellView и NSTextField внутри cellview. Я пытаюсь написать код инициализации в методе initWithFrame: для подкласса NSTextField (TableTextField), но похоже, что метод initWithFrame: вообще не вызывается, даже когда я создаю новые строки для NSTableView, каждый из которых содержит экземпляр TableTextField. Вот код в файле TableTextField.m:initWtihFrame: метод для пользовательского текстового поля, который не вызывается при создании в TableCellView

#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

Если вы используете XIb файлы макет мнения, метод инициализатора называют это initWithCoder:

+0

Awesome, что работает. Благодаря! –