我将如何使用 UINibs 实例化和使用 UITableViewCell 作为 iOS5.0 中的 tableview。我知道 iOS5.0 中有一个 registerNib:forCellReuseIdentifier: 也需要使用,但不知道如何使用
提前感谢您对此的任何帮助
我将如何使用 UINibs 实例化和使用 UITableViewCell 作为 iOS5.0 中的 tableview。我知道 iOS5.0 中有一个 registerNib:forCellReuseIdentifier: 也需要使用,但不知道如何使用
提前感谢您对此的任何帮助
步骤 2 和 3 可以组合使用,因此您可以在 viewDidLoad 中使用以下行:
[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];
然后,在 cellForRowAtIndexPath 中,如果您想要 nib 中的一个单元格,则将其出列:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
这要么从 nib 创建一个新实例,要么使现有单元出队。
@jrturtons 的答案是正确的,但不幸的是,iOS 5(在 iOS 6 中已修复)与 VoiceOver 一起存在一个错误: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