4

UITableViewCellnib からカスタム サブクラス化された s をロードしています。

私のView ControllerviewDidLoadメソッドはregisterNib:forCellReuseIdentifier. 私のView ControllerのcellForRowAtIndexPathメソッドはdequeueReusableCellWithIdentifierセルをロードするために使用しますが、セルを割り当て/初期化することはありません。

ビューコントローラー:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.tV registerNib:[UINib nibWithNibName:@"VersatileIntTFCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:kTFInt];
    self.tV.delegate=self;
    self.tV.dataSource=self;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Int TextField";
    VersatileIntTFCell *cell = (VersatileIntTFCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];   
    return cell;

}

テーブル ビューは正常に表示され、セルは正常に表示されます。

今、私は のサブクラスを書き始めていますUITableViewCell。私のサブクラスにはそれぞれ @property iVar があります (そうではありませんIBOutlets)。initサブクラスのメソッドでこれらを初期化したいのですUITableViewCellが、それが呼び出されることはないようです。viewController でそれらを初期化できますが、cellForRowAtIndexPathこれは避けたいと思います。UITableViewCellサブクラスでやりたい。これは可能ですか?もしそうなら、どのように/どこで/いつ?

4

3 に答える 3

10

メソッドをオーバーライドし、awakeFromNibコードを init ではなくそこに配置します。

ドキュメントから:

nib 読み込みインフラストラクチャは、アーカイブ内のすべてのオブジェクトが読み込まれて初期化された後にのみ、nib アーカイブから再作成された各オブジェクトに awakeFromNib メッセージを送信します。オブジェクトが awakeFromNib メッセージを受信すると、すべてのアウトレットとアクション接続がすでに確立されていることが保証されます。親クラスに必要な追加の初期化を実行する機会を与えるには、awakeFromNib のスーパー実装を呼び出す必要があります。

于 2013-01-28T21:57:58.803 に答える
3

nib からロードされた後に UIView を初期化したい場合は、オーバーライドする必要がありますinitWithCoderawakeFromNibも役立つかもしれません。UIView リファレンスの「オーバーライドするメソッド」を参照してください。

于 2012-09-26T15:02:48.073 に答える
1

prepareForReuse使用できる方法があります。

http://developer.apple.com/library/ios/documentation/uikit/reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instm/UITableViewCell/prepareForReuse

于 2012-09-09T01:03:20.563 に答える