2017-09-05 14 views
1

私はXIBを作成します。InitWithCoderはCocoa NSViewベースクラスのために決して呼び出されません

MyCustomViewという名前のこのクラスを作成し、それをXIBのファイル所有者に割り当てます。

- (instancetype)initWithCoder:(NSCoder *)aDecoder{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) [self load]; 
    return self; 
} 

- (instancetype)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) [self load]; 
    return self; 
} 

- (void)load { 

    NSArray* topLevelObjects; 
    [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" 
           owner:self 
         topLevelObjects:&topLevelObjects]; 

    NSView* view; 
    for (id aView in topLevelObjects) { 
    if ([umaVista isKindOfClass:[NSView class]]) { 
     view = umaVista; 
     break; 
    } 
    } 

    [self addSubview:view]; 
    view.frame = self.bounds; 

} 

メインアプリでNSViewを作成しました。

このビューはMyCustomViewに変更されています。

私はアプリを実行します。 MyCustomViewinitWithCoderは実行されません。 initWithFrameは実行されません。 awakeFromNibは実行されません。

何も起こりません。

アイデア?

+0

「XIBの最初のレスポンダに割り当てる」とはどういう意味ですか? First Responderに何かを割り当てることはできません。これは、動的なFirst Responder値を表すプロキシアイテムです。 –

+0

どういう意味ですか?これは、Web上のすべてのチュートリアルがどのように伝えるかです。 – SpaceDog

+0

「ファイルの所有者」に割り当てられたことを意味しますか? –

答えて

1

「ファイルの所有者」as I've written elsewhereは、アーカイブ内の実際のオブジェクトではありません。これはプレースホルダです。ペン先を開梱すると、既存のオブジェクトが使用されます。

カスタムビューのインスタンスをペン先に配置する必要があるようです。ファイルの所有者にしないで、オブジェクトパレットからビューをドラッグし、アイデンティティインスペクタ(右ペイン、上の⌘-⌥-3を押す)でクラスを変更します。ペン先のサブビューも作成してください。

次に、NSBundleにあなたのペン先を読み込ませてください。あなたのカスタムビューはinitWithCoder:awakeFromNibとなり、特定のサブビューを見つけるために階層を掘り下げる必要はありません。

+0

OKありがとう。私はそれを行います! – SpaceDog

関連する問題