Итак, я пытаюсь создать пользовательский 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-мя рядами):
Awesome, что работает. Благодаря! –