26

UIView をサブクラス化しようとしています。私はすでにいくつかの指定された初期化子を持っており、カスタムビューをコードまたは Nib ファイルから初期化できるようにしたいと考えています。そのため、Apple は指定されたイニシャライザを使用するように指示しましたが、彼らはそれを自分で行っていません -initWithCoder:を呼び出しませんinitWithFrame:。両方の状況で指定された初期化子を呼び出すにはどうすればよいですか? それを行う方法はありませんか?

4

2 に答える 2

42

特別な初期化を 1 つのメソッドにパックします。プライベートにすることができます (.m で宣言)。次に、両方のイニシャライザをオーバーライドし、その中から init-method を呼び出します。

- (void)myInitialization
{
    //do your stuff
}

-  (id)initWithFrame:(CGRect)aRect
{
    self = [super initWithFrame:aRect];

    if (self)
    {
        [self myInitialization];
    }

    return self;
}

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

    return self;
}
于 2013-03-07T19:07:00.497 に答える
5

あなたが言ったように:

initWithFrame:-このメソッドを実装することをお勧めします。このメソッドに加えて、またはこのメソッドの代わりに、カスタム初期化メソッドを実装することもできます。

initWithCoder:-Interface Builderのnibファイルからビューをロードし、ビューにカスタムの初期化が必要な場合は、このメソッドを実装します。

私がすることは、両方が呼び出すメソッドであり、これは、に実装したい一般的な動作を持ちますUIView

于 2013-03-07T19:04:04.153 に答える