16

UINibsを使用してiOS5.0のテーブルビューにUITableViewCellをインスタンス化して使用するにはどうすればよいですか?iOS5.0にはregisterNib:forCellReuseIdentifier:も使用する必要があることは知っていますが、使用方法がわかりません。

これについて助けてくれてありがとう

4

2 に答える 2

42
  1. UITableViewCellを最上位オブジェクトとして使用してxibファイルを作成します。これはCell.xibと呼ばれます
  2. このファイルに基づいてUINibオブジェクトを作成します
  3. UINibをテーブルビューに登録します(通常、テーブルビューコントローラーサブクラスのviewDidLoadにあります)。

手順2と3は組み合わせることができるため、viewDidLoadで次の行を使用します。

[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];

次に、cellForRowAtIndexPathで、nibからセルの1つが必要な場合は、それをデキューします。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

これにより、nibから新しいインスタンスが作成されるか、既存のセルがデキューされます。

于 2012-05-10T12:24:41.293 に答える
1

@jrturtonsの答えは正しいですが、残念ながら、VoiceOverと組み合わせたiOS 5(iOS 6で修正済み)にバグがあります:rdar://11549999。次のカテゴリでUITableView問題が修正されます。-fixedDequeueReusableCellWithIdentifier:通常の代わりに使用してdequeueReusableCellWithIdentifier:ください。もちろん、NIBはを使用して登録する必要があります

[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];

前(で-viewDidLoad)。

UITableView + Workaround.m:

@implementation UITableView (Workaround)
- (id)fixedDequeueReusableCellWithIdentifier:(NSString *)identifier {
    id cell = [self dequeueReusableCellWithIdentifier:identifier];
    if (!cell) {
        // fix for rdar://11549999 (registerNib… fails on iOS 5 if VoiceOver is enabled)
        cell = [[[NSBundle mainBundle] loadNibNamed:identifier owner:self options:nil] objectAtIndex:0];
    }
    return cell;
}
@end
于 2012-12-14T15:40:14.257 に答える