如何使用UINib来实例化和使用自定义的UITableViewCells

我将如何使用UINibs实例化和使用iOS5.0中的tableview的UITableViewCell。 我知道有一个registerNib:forCellReuseIdentifier:在iOS5.0,也需要使用,但不知道如何使用它

在此先感谢您的帮助

  1. 用UITableViewCell作为顶层对象创build你的xib文件。 这叫做Cell.xib
  2. 基于这个文件创build一个UINib对象
  3. 注册UINib与表视图(通常在您的表视图控制器子类的viewDidLoad)。

步骤2和步骤3可以组合,因此您可以在viewDidLoad中使用以下行:

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

然后,在cellForRowAtIndexPath中,如果你想要从nib中取出一个单元格,

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

这要么从笔尖创build一个新的实例,要么使现有的单元出列。

@jrturtons答案是正确的,但不幸的是iOS 5中有一个错误(在iOS 6中修复)与VoiceOver结合使用: rdar:// 11549999 。 UITableView上的以下类别修复了这个问题。 只需使用-fixedDequeueReusableCellWithIdentifier:而不是正常的dequeueReusableCellWithIdentifier: -fixedDequeueReusableCellWithIdentifier: 当然,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