我看过几篇关于原型细胞没有更新的类似帖子,在尝试完成一堆答案后,我不得不发表一个我自己的问题。像许多人一样,我创建了一个UITableViewCell的子类,并将几个属性链接到Xcode中的原型单元格。
Custom Cell's .h
@property (strong, nonatomic) IBOutlet UILabel *playerNameLabel;
@property (strong, nonatomic) IBOutlet UILabel *positionLabel;
@property (strong, nonatomic) IBOutlet UILabel *playersPositionLabel;
@property (strong, nonatomic) IBOutlet UILabel *teamLabel;
@property (strong, nonatomic) IBOutlet UILabel *playersTeamLabel;
@property (strong, nonatomic) IBOutlet UIImageView *logoView;
@property (strong, nonatomic) IBOutlet UIView *layerView;
在我的ViewController文件中,我使用以下代码。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
PlayerTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"playerCell" forIndexPath:indexPath];
if ([self.playerSearchBar.text isEqualToString: @""]) {
Player *player = self.playerArray[indexPath.row];
cell.playerNameLabel.text = player.fullName;
cell.playersPositionLabel.text = player.position;
cell.playersTeamLabel.text = player.team;
} else {
Player *player = self.filteredPlayerArray[indexPath.row];
cell.playerNameLabel.text = player.fullName;
cell.playersPositionLabel.text = player.position;
cell.playersTeamLabel.text = player.team;
}
return cell;
}
有趣的是数据存在,我可以在调试器中看到它,但没有标签更新。以前我用标签做过这个,但由于我使单元格的设计更加复杂,我已经转向子类化。这里有什么我可能会遗失的吗?
答案 0 :(得分:0)
所以这个解决方案有点莫名其妙。我删除了所有的IBOutlets并重新创建它们并重新连接它们。现在,一切都按原样运作。对于上下文,在删除它们之前,它们已正确连接到故事板。
答案 1 :(得分:0)
我想很可能你错过了这个......
[self.tableView registerNib:[UINib nibWithNibName:@"YourCustomCellNibName" bundle:nil]
forCellReuseIdentifier:@"playerCell"];
在 tableView:cellForRowAtIndexPath:中,当我们调用dequeueReusableCellWithIdentifier:forIndexPath:时,如果表中没有可用的可重用单元格,则会自动加载nib并从中实例化单元格然后回到我们身边。
答案 2 :(得分:0)
如果您在故事板中配置了单元格,则不需要注册单元格。如屏幕截图所示,单元格正确显示,因此注册过程成功。如果您正在使用笔尖,如果您忘记注册它会崩溃,因此这不应解决上面建议的问题。
我想到的第一件事是,playerArray
或filteredPlayArray
可能没有设置,但它会显示没有占位符文本。所以我不认为这会解决你的问题。无论如何,试着检查一下。您是否还检查过cell.playerNameLabel
实际设置为非零值?
如果没有,如果所有连接都正确,这也可能是Xcode问题。尝试重新启动Xcode并重新连接所有IBOutlets。
答案 3 :(得分:-1)
始终cellForRowAtIndexPath
方法返回相同的单元格。所以请在第一行更新您的方法,如下所示。
PlayerTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"playerCell"];
这可以解决问题。假设你在故事板中有正确的identifier
名称,即playerCell