滚动后,UITableViewCell会更改内容

时间:2017-07-25 21:40:12

标签: objective-c uitableview cell

我的问题:我的一些自定义UITableViewCell包含额外的UILabel和额外的UIView以获取更多信息。 在我的代码中,当没有此对象的信息时,我删除了这些额外的UILabel和UIView。 但每次用户滚动浏览UITableView时,这些标签都会隐藏,尽管这些单元格还有其他信息,并显示在另一个单元格中。

这是我的代码:

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

NBSnackTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell"];


NSDictionary *softdrinkDict = [_allSoftdrinksArray objectAtIndex:indexPath.row];

cell.snackNameLabel.text = [softdrinkDict valueForKey:@"name"];
cell.snackPriceLabel.text = [NSString stringWithFormat:@"%@ - %@", [softdrinkDict valueForKey:@"size"], [softdrinkDict valueForKey:@"preis"]];


    if ([softdrinkDict valueForKey:@"info"])
    {
        cell.accessoryType = UITableViewCellAccessoryDetailButton;
        cell.tintColor = [NBColor primaryTextColor];
        cell.snackInfoLabel.text = [softdrinkDict valueForKey:@"info"];
    }
    else
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
        [cell.snackInfoLabel removeFromSuperview];
        [cell.snackInfoView removeFromSuperview];
    }

    if ([softdrinkDict valueForKey:@"zusatzstoffe"])
    {
        cell.snackZusatzstoffLabel.text = [softdrinkDict valueForKey:@"zusatzstoffe"];
    }
    else
    {
        [cell.snackZusatzstoffLabel removeFromSuperview];
    }

[cell layoutContentWithRect:cell.bounds];

return cell;}

1 个答案:

答案 0 :(得分:1)

我发现了一个问题:

您正在从超级视图中删除标签,但不会将其重新添加为您单元格的子视图。

您可以将文本设置为@“”,或者确保在有数据要显示时将标签添加到单元格的contentView中,而不是在标签上调用removeFromSuperview。

示例:

if ([softdrinkDict valueForKey:@"zusatzstoffe"])
{
    if (![cell.snackZusatzstoffLabel isDescendantOfView:cell.contentView]) {
        [cell.contentView addSubview:cell.snackZusatzstoffLabel];
    }
    cell.snackZusatzstoffLabel.text = [softdrinkDict valueForKey:@"zusatzstoffe"];
}
else
{
    [cell.snackZusatzstoffLabel removeFromSuperview];
}