2012-01-04 17 views
6

私はいくつかのサブビューをプログラムで追加する必要があるカスタムビューを持っています。これらのサブビューを作成して追加するのに最適な場所はどれですか? Apple docs say:[self addSubView]を呼び出す場所は?

ビュークラスで1つ以上の完全なサブビューを管理している場合は、次の操作を行います。ビューの初期化シーケンス中にこれらのサブビューを作成します。

これは私には少し不明です。私はinitWithFrameinitWithCoderまたは他のどこかでそれを扱うべきでしょうか?

ここではコントローラについては言及していませんが、これは初期化する必要があるビューです。

答えて

9

initWithFrameはUIViewをプログラムで作成するためのメソッドであり、UIViewはXIBからインスタンス化されるとinitWithCoderが呼び出されます。

だから、それはあなたの含むビューをどのように作成するかによって異なります。すべてのケースをカバーする 方法:

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

- (id) initWithCoder:(NSCoder*)aDecoder 
{ 
    if ((self = [super initWithCoder:aDecoder])){ 
     [self setUpSubViews];//same setupv for both Methods 
    } 
    return self; 
} 

- (void) setUpSubViews 
{ 
    //here create your subviews hierarchy 
} 
+0

1つのNIBからビュー(コンテナとサブビュー)を作成する方法があります。 – Vinzzz

+0

ありがとう、それはよさそうだ。 – georg

0

通常、ビューを常に表示する場合は、ビューと[self addSubView]を親ビューコントローラのviewdidload/viewwillappearに作成する必要があります。もしあなたがwihなら、それを隠すように設定することもできます。ボタンのクリックや他のアクションに関するビューを表示するような他のシナリオでは、それに応じてサブビューを追加する必要があります。

+0

もっと詳しく注意してください。彼は独自のサブビューを作成/追加する必要があるビューについて話しています。これはビューコントローラとはまったく無関係です! –

0

積分とは、重要であるか大量かを意味します。 viewDidLoadはうまく動作しますが、本当に大きな、または重要なものについては、初期化メソッドがあります。

3

次の操作を行います。あなたのビューのための指定イニシャライザ方の方法を取ります。つまり、他のすべてのイニシャライザが呼び出す最も設定可能な(つまり、ほとんどの引数)init ...メソッドです。たとえば、最も一般的なのは、-initWithFrame:とすることができます。次に、このメソッドを次のように実装します。

- (id) initWithFrame:(CGRect)frame { 
    if ((self = [super initWithFrame:frame])) { 
     // add new views here, for example: 
     UIImageView *imageView = [[UIImageView alloc] initWithImage:anImage]; 
     [self addSubview:imageView]; 
     [imageView release]; 
    } 
    return self; 
} 
+0

ありがとうございました!.. – georg

+0

本当に助けても問題ありませんか? –

+1

もっと「参照」コードを提供して以来、私は別の答えを受け入れました。もしできれば、私もあなたのことを受け入れるだろう。 – georg

関連する問題