1

Nib ファイルからの UIView の読み込みに関しては多くの質問があるため、それは問題ではありません。UIView を Nib ファイルから正常にロードしていますが、問題は、ビューの設定方法によっては、ユーザーの操作がないか、IBActions がクラッシュを引き起こすことです。

シナリオ 0:

- (id) init {
self = [super init];

if (self) {
    [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
    [self addSubview:self.view];
}

return self;

}

結果: これにより Nib からビューが読み込まれますが、UIButtons はタップできません。また、このビューがブロックすることになっているにもかかわらず、この背後にある View Controller のメイン ビューがまだインタラクティブであることにも気付きました。

シナリオ 1: この行を変更する

[self addSubview:self.view]

self = (MyView*)self.view;

ビューがその背後にあるメイン ビュー コントローラー ビューをブロックし、ボタンのサブビューがタップ可能になりますが、ボタンのセレクターを IBAction に接続すると、次のエラーでクラッシュが発生します。

-[MyView performSelector:withObject:withObject:]: message sent to deallocated instance 0x12f1cff0

このシナリオでビューの割り当てが解除されるのはなぜですか? 誰かが尋ねる前に、次のように単純にサブビューを追加しています。

MyView *myView = [[MyView alloc] init];
[self.view addSubview:myView];

編集:興味深いことに、(どちらのシナリオでも) awakeFromNib が呼び出されないことにも気付きました。それはすべきですか?

4

1 に答える 1

1

指定された初期化子はinitWithFrameです

それとは別に::IBOutletはどのように表示されますか?

于 2012-11-08T19:55:05.827 に答える