iOS:dequeueReusableCellWithIdentifier 返回单元格,其中 IBOutlets 为 nil
Posted
技术标签:
【中文标题】iOS:dequeueReusableCellWithIdentifier 返回单元格,其中 IBOutlets 为 nil【英文标题】:iOS: dequeueReusableCellWithIdentifier returning cell with IBOutlets that are nil 【发布时间】:2016-02-02 01:26:01 【问题描述】:我有一个自定义 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];
【问题讨论】:
【参考方案1】:因为您创建了一个 xib 节目,所以您需要 registerNib
而不是类。如果您创建没有xib
的自定义单元格,您将使用registerClass
。
所以你应该改变这段代码:
[self.tableView registerClass:[MetroTableViewCell class]
forCellReuseIdentifier:@"MetroTableViewCell"];
收件人:
[self.tableView registerNib:[UINib nibWithNibName:@"MetroTableViewCell" bundle:nil] forCellReuseIdentifier:@"MetroTableViewCell"];
希望对您有所帮助!
【讨论】:
【参考方案2】:使用registerClass:forReuseIdentifier:
不使用NIB 来创建单元格。它只是创建给定类的一个新实例。
你想使用registerNib:forReuseIdentifier:
而不是这个:
[self.tableView registerClass:[MetroTableViewCell class]
forCellReuseIdentifier:@"MetroTableViewCell"];
使用:
[self.tableView registerNib:[UINib nibWithNibName:@"MetroTableViewCell" bundle: nil]
forCellReuseIdentifier:@"MetroTableViewCell"];
【讨论】:
以上是关于iOS:dequeueReusableCellWithIdentifier 返回单元格,其中 IBOutlets 为 nil的主要内容,如果未能解决你的问题,请参考以下文章