16

私はUIViewインターフェースビルダーを持っています。私のView Controllerには、インターフェイスビルダーIBOutlet MyUIViewの を指す があります。UIView

のクラスUIViewを " MyUIView" (カスタム UIView クラス)に変更しましたinitが、サブクラスのメソッドがどれも起動されていないようです。

私は何を間違っていますか?

4

2 に答える 2

27

最初にinit呼び出す必要がある代わりに、次のように呼び出します。initWithCoderinit

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

- (void)baseClassInit {

    //initialize all ivars and properties    
}
于 2013-02-28T16:33:47.803 に答える
22

簡単な答え: を使用する必要がありますinitWithCoder:

initWithFrame:ドキュメントから:

Interface Builder を使用してインターフェイスを設計する場合、ビュー オブジェクトが後で nib ファイルから読み込まれるときに、このメソッドは呼び出されません。nib ファイル内のオブジェクトは、再構成された後、initWithCoder: メソッドを使用して初期化されます。このメソッドは、ビューの属性を nib ファイルに保存されている属性と一致するように変更します。

nib / xib / Storyboard ファイルを使用している場合は、initWithCoder:. ビューをプログラムで作成している場合は、initまたはを使用できますinitWithFrame:

于 2013-02-28T16:54:38.733 に答える