2010-12-30 9 views
3

[[NSBundle mainBundle] loadNibNamed:...]を使用してペン先からUITableViewCellをロードしています。今、私はいくつかのポスト初期化作業をプログラムで行う前に、私のコードでtableviewcellを使用するようにします。このコードは、initWithCoderメソッドではできないように見えます。クラスのラベルオブジェクトはまだnilなので(何も設定できないため)最初にtableviewcellのUILabelsが初期化されます(すべてIBOutletsとして定義されています)。ペン先から初期化されたUITableViewCellをプログラムで変更しますか?

答えて

5

UITableViewCellをサブクラス化し、awakeFromNibメソッドを入れてペン先から目を覚ましてから初期化を実行する必要があります。

コードを柔軟に保つには、この初期コードをmyInitと呼ばれるルーチンに入れて、awakeFromNibとそれを呼び出す必要のある場所から呼び出します。

私はいくつかの苦労の末、この状況に対して少し異なるアプローチを考え出しました。私はUITableViewCellをサブクラス化し、このような初期化ルーチンがありますcontentViewは、セルの内容を含むIBOutletある

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     [[NSBundle mainBundle] loadNibNamed:@"MyUITableViewCell" owner:self options:nil]; 
     [self addSubview:self.contentView]; 
    } 
    return self; 
} 

を。これにより、残りのコードは他のセルと同じようにこのセルを呼び出すことができます。 ((MyUITableViewCell*)[tv dequeueReusableCellWithIdentifier:CellIdentifier];の1つの厄介なキャストから離れて)