【问题标题】:My UITableView has duplicated rows我的 UITableView 有重复的行
【发布时间】:2010-06-08 02:37:21
【问题描述】:

我不知道为什么,但我的 UITableView 并不花哨,它在不应该出现的时候显示重复行。

似乎在用户滚动时添加的行(即开始时不在屏幕上的行)正在获取错误行索引的数据。这几乎就像当一个新的单元格出队时,它正在使用一个“已”使用但没有正确清理的单元格。

您是否需要“清理”出队的单元格,以便新单元格不使用已创建的单元格?

我的代码如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CustomCellIdentifier = @"CustomCellIdentifier";

    MyDayCell *cell = (MyDayCell *)[tableView 
                                      dequeueReusableCellWithIdentifier: CustomCellIdentifier];

    if (cell == nil) { 
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyDayCell" owner:self options:nil];

        for (id oneObject in nib) 
            if ([oneObject isKindOfClass:[MyDayCell class]])
                cell = (MyDayCell *)oneObject;

    } 

    NSUInteger section = [indexPath section];
    NSUInteger row = [indexPath row]; 
    NSArray *thisSectionItems = (NSArray*)[self.listData objectForKey: [[NSNumber alloc] initWithInt:section]];
    MyDayDetails *rowData = [thisSectionItems objectAtIndex:row]; 

    //setup my cells data here...

    return cell;
}

这段代码有什么问题吗?

以前有人见过这样的事情吗?

【问题讨论】:

    标签: iphone objective-c uitableview


    【解决方案1】:

    细胞应该被重复使用。如果您想关闭它,请关闭单元格重复使用。

    您的问题实际上出在您没有包含的代码中。

    //setup my cells data here...
    

    此代码负责完全加载表格中各行之间变化的单元格的各个方面。显示不止一次的数据?有的情况下需要设置,没有的情况下清除。

    例如:

    cell.textLabel.text = str ? str : @"";
    

    这样,相同的几个单元格被反复使用,表格单元格不需要频繁设置和销毁。

    (正如我提到的,您可以关闭单元重用。但您应该做到这一点。)

    【讨论】:

    • 好的,这是有道理的,而且我已经实现了,谢谢
    【解决方案2】:

    我想我已经解决了,我只需要在if (cell == nil) 块中添加一个else 语句来清理单元格填充值吗?

    这是正确的做法吗?

    【讨论】:

    • 你不是在改变“//在此处设置我的单元格数据...”部分中的值吗?我认为您不需要先明确清理填充的值。
    • 之类的,我只是设置需要设置的内容,而不是清理旧信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多