我有一个自定义UITableViewCell,其中一个视图在XIB文件中定义:
@interface MetroTableViewCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *metroLineName;
@end
我正在将细胞出列:
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MetroTableViewCell *cell = (MetroTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"MetroTableViewCell" forIndexPath:indexPath];
// AT THIS POINT, cell.metroLineName is equal to nil
return cell;
}
该类正在使用表视图进行注册:
[self.tableView registerClass:[MetroTableViewCell class]
forCellReuseIdentifier:@"MetroTableViewCell"];
在XIB文件中,我还将类设置为" MetroTableViewCell"
那么为什么IBOutlet设置为nil?
注意:使用时不会发生此问题:
MetroTableViewCell *cell = [[[NSBundle mainBundle] loadNibNamed:@"MetroTableViewCell"
owner:self options:nil]
objectAtIndex:0];
答案 0 :(得分:1)
因为您创建了一个xib节目,所以您需要registerNib
而不是类。如果您创建没有xib
的自定义单元格,则会使用registerClass
。
所以你应该改变这段代码:
[self.tableView registerClass:[MetroTableViewCell class]
forCellReuseIdentifier:@"MetroTableViewCell"];
要:
[self.tableView registerNib:[UINib nibWithNibName:@"MetroTableViewCell" bundle:nil] forCellReuseIdentifier:@"MetroTableViewCell"];
希望这有帮助!
答案 1 :(得分:1)
使用registerClass:forReuseIdentifier:
并不使用NIB来创建单元格。它只是创建给定类的新实例。
您想使用registerNib:forReuseIdentifier:
而不是:
[self.tableView registerClass:[MetroTableViewCell class]
forCellReuseIdentifier:@"MetroTableViewCell"];
使用:
[self.tableView registerNib:[UINib nibWithNibName:@"MetroTableViewCell" bundle: nil]
forCellReuseIdentifier:@"MetroTableViewCell"];