3

ペン先の中に素敵な UIScrollView があり、うまく機能しました。次に、いくつかの非常に特別なニーズがあり、UIScrollView をサブクラス化しました。私の Nib では、ID インスペクターのクラスをサブクラスに変更しました。

しかし、何らかの理由で、私の -initWithFrame: メソッドは、nib ローダーが nib からこれらすべてのオブジェクトを構築するときに呼び出されません。実際、サブクラスでは今のところ何も変更していません。そして、スクロールビューはうまく機能します。テスト目的で SpecializedUIScrollView であるべきだとペン先に伝えたとしても、空白の UIScrollView のように見えることを期待してください。

Nibファイルを使用してUIScrollViewをサブクラス化するときに考慮しなければならないことは他にありますか?

私の専用イニシャライザは次のようになります。

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        NSLog(@"Hello !!!!!!!!!!!!!");
    }
    return self;
}

Nib からロードしようとすると、コンソールに Hello が表示されません。もちろん、自分で割り当てて初期化すればうまくいきます。しかし、代わりにその非常にクールなInterface Builderを使用できるのであれば、スクロールビューをプログラムで配置したくありません。

4

2 に答える 2

3

nib または xib のオブジェクトはシリアル化されたオブジェクトとして保存されます。これは、awakeFromNibinit メソッドが呼び出されないため、メソッドを使用する必要があることを意味する場合があります。

于 2009-05-07T17:02:18.670 に答える
1

Extend initWithCoder、必ずスーパーメソッドを呼び出してください。setFrameクラスで呼び出されるのは、このスーパー コールの間です。

initWithFrame次に、標準の呼び出しを で再利用できますinitWithCoder。インターフェイス ビルダーがフレーム サイズを制御します。

- (id)initWithCoder:(NSCoder *)aDecoder {
    [super initWithCoder:aDecoder]; // Required. setFrame will be called during this method.
    return [self initWithFrame:[self frame]];
}
于 2011-04-29T20:41:28.130 に答える