我如何使用UINibs在iOS5.0中实例化和使用UITableViewCell作为tableview。我知道有一个registerNib:forCellReuseIdentifier:在iOS5.0中也需要使用,但我不知道如何使用它
提前感谢您对此的任何帮助
答案 0 :(得分:42)
可以组合步骤2和3,因此您可以在viewDidLoad中使用以下行:
[self.tableView registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellReuseIdentifier:@"Cell"];
然后,在cellForRowAtIndexPath中,如果你想要一个来自笔尖的单元格,你可以将它出列:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
这将从nib创建一个新实例,或者使现有单元格出列。
答案 1 :(得分:1)
@jrturtons的回答是正确的,但遗憾的是iOS 5(在iOS 6中已修复)与VoiceOver一起出现了一个错误:rdar://11549999。 UITableView
上的以下类别解决了该问题。只需使用-fixedDequeueReusableCellWithIdentifier:
代替普通dequeueReusableCellWithIdentifier:
即可。当然,必须使用
[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