自定义UITableViewCells不更新(原型单元格)

时间:2016-01-14 17:39:28

标签: ios objective-c uitableview

我看过几篇关于原型细胞没有更新的类似帖子,在尝试完成一堆答案后,我不得不发表一个我自己的问题。像许多人一样,我创建了一个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;
}

有趣的是数据存在,我可以在调试器中看到它,但没有标签更新。以前我用标签做过这个,但由于我使单元格的设计更加复杂,我已经转向子类化。这里有什么我可能会遗失的吗?

Screenshot

4 个答案:

答案 0 :(得分:0)

所以这个解决方案有点莫名其妙。我删除了所有的IBOutlets并重新创建它们并重新连接它们。现在,一切都按原样运作。对于上下文,在删除它们之前,它们已正确连接到故事板。

答案 1 :(得分:0)

我想很可能你错过了这个......

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

tableView:cellForRowAtIndexPath:中,当我们调用dequeueReusableCellWithIdentifier:forIndexPath:时,如果表中没有可用的可重用单元格,则会自动加载nib并从中实例化单元格然后回到我们身边。

答案 2 :(得分:0)

如果您在故事板中配置了单元格,则不需要注册单元格。如屏幕截图所示,单元格正确显示,因此注册过程成功。如果您正在使用笔尖,如果您忘记注册它会崩溃,因此这不应解决上面建议的问题。

我想到的第一件事是,playerArrayfilteredPlayArray可能没有设置,但它会显示没有占位符文本。所以我不认为这会解决你的问题。无论如何,试着检查一下。您是否还检查过cell.playerNameLabel实际设置为非零值? 如果没有,如果所有连接都正确,这也可能是Xcode问题。尝试重新启动Xcode并重新连接所有IBOutlets。

答案 3 :(得分:-1)

始终cellForRowAtIndexPath方法返回相同的单元格。所以请在第一行更新您的方法,如下所示。

PlayerTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"playerCell"];

这可以解决问题。假设你在故事板中有正确的identifier名称,即playerCell