0

したがって、セルビュー内で NSTableCellView と 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 に答える