UITableView重复内容

时间:2014-02-16 21:44:44

标签: ios objective-c uitableview

我知道这是一个古老的问题,但这次我有点扭曲。

正如标题所说,我的UITableView正在重复内容。在这种情况下,当在屏幕上滚动并返回屏幕时,背景颜色在单元格上不会发生变化。

我知道这可能是由于重复使用单元格,但我的问题是我不能只给每个单元格一个唯一的单元格标识符,因为我在我的Storyboard中构建了我的单元格,这需要在那里键入它。 / p>

那么我怎样才能解决这个问题,同时将我的单元格设计在我的故事板中呢?

一点代码:

    static NSString *cellIdentifier = @"Cell";
        SLDetailCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

        if (!cell)
        {
            cell = [[SLDetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        }

    [cell setBackgroundColor:[UIColor slateBackgroundGrey]]; //Set standard background colour
    [cell.titleLbl setText:[self.tableTitles objectAtIndex:indexPath.row]]; //cell titles from an array (static data I made)

    //This will occur for each cell, here are two examples
    if ([cell.titleLbl.text isEqualToString:@"Aircraft"])
    {
        NSString *detailText = @"";
        if (!self.flight.aircraft) detailText = @"N/A";
        else detailText = self.flight.aircraft.name;
        [cell.detailLbl setText:detailText];
    }
    if ([cell.titleLbl.text isEqualToString:@"Delete"])
    {
        UIView *containerView = [cell.titleLbl superview];
        [containerView setBackgroundColor:[UIColor triggerRed]];
        [cell.titleLbl setTextColor:[UIColor whiteColor]];
        [cell.disclosureIndicator setHidden:YES];
        [cell.detailLbl setText:@""];
    }

对于删除单元格,我更改了单元格的颜色属性。

子类化prepareForReuse以重置单元格数据无法停止重复数据,就像在语句中设置每个单独单元格中的颜色一样(如上所示)。

感谢。

4 个答案:

答案 0 :(得分:3)

每当您返回一个单元格时,无论是否重用,您都必须配置所有单元格属性。否则,您会遇到一些情况,其中一些属性从上次开始被挂起。无论是从故事板还是其他方式创建单元格,这都适用,这是一个单元重用问题,仅此而已。

答案 1 :(得分:0)

您似乎拥有自定义UITableViewCell子类。您可以覆盖该类中的prepareForReuse方法并重置背景颜色(或者您想要重置的任何其他内容)。

确保在实施中致电[super prepareForReuse]

答案 2 :(得分:0)

来自Apple文档:

  

tableView中的表视图委托:cellForRowAtIndexPath:should   重复使用单元格时,请始终重置所有内容。

来源: UITableViewCell Class Reference

所以一定要在那里设置背景颜色。

希望它有所帮助。

答案 3 :(得分:0)

这个SO答案包含答案为什么以及如何使用UITableViewCell出队。如果您知道内容重复的原因:iPhone - dequeueReusableCellWithIdentifier usage