UINibsを使用してiOS5.0のテーブルビューにUITableViewCellをインスタンス化して使用するにはどうすればよいですか?iOS5.0にはregisterNib:forCellReuseIdentifier:も使用する必要があることは知っていますが、使用方法がわかりません。
これについて助けてくれてありがとう
UINibsを使用してiOS5.0のテーブルビューにUITableViewCellをインスタンス化して使用するにはどうすればよいですか?iOS5.0にはregisterNib:forCellReuseIdentifier:も使用する必要があることは知っていますが、使用方法がわかりません。
これについて助けてくれてありがとう
手順2と3は組み合わせることができるため、viewDidLoadで次の行を使用します。
[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];
次に、cellForRowAtIndexPathで、nibからセルの1つが必要な場合は、それをデキューします。
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
これにより、nibから新しいインスタンスが作成されるか、既存のセルがデキューされます。
@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