UITableViewCell - 在重用时显示数据顶部的数据视图

时间:2011-06-06 15:54:09

标签: iphone uitableview

我正在使用自定义UITableViewCell。它们加载得很好,但是当它们被重用而不是替换标签中的文本时,它们就是一些如何在它们上面书写的。任何想法如何阻止这种行为?

我假设在重新使用之前我没有正确重置视图。我目前正在清空标签,所以它们只有一个空白的@“”字符串。但我仍然得到旧文本加上新的(非常混乱)。

我确定有一个明显的解决方案(目前我只是不重复使用单元格,但这不是最好的做法,在旧设备上很慢),所以如果有人可以提供帮助,我会非常感激

由于

ED

这里要求的是修改单元格的方法

static NSString *CellIdentifier = @"Cell";
TransactionCellView *cell = (TransactionCellView *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if(cell == nil) {
    [[NSBundle mainBundle] loadNibNamed:@"TransactionCellView" owner:self options:nil];
    cell = tblCell;
}

[cell resetCell]; // clears the labels
[cell setData:[dataArray objectAtIndex:[indexPath row]]; // replaces the data and updates the labels

return cell;

}

4 个答案:

答案 0 :(得分:2)

解决了这个问题!当你知道问题是什么时,非常简单。

我正在使用IB并且未在我的UILabels上选择“Clear Graphics Context”。所以这就是为什么下一篇文章只是覆盖旧版本。

想要帮助的人们。

答案 1 :(得分:1)

你是正确的,因为细胞正在重复使用。您的代码应使用以下模式粗略设置:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString* identifier = @"someidentifier";
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:identifier]; 
    if(!cell) {
        // create the cell and add all subviews to it
    } else {
        // update the cell and access appropriate subviews to modify what is displayed
    }
    return cell;
}

第一次使用标识符时将创建单元格。对于所有后续请求,将从UITableView缓存(通过dequeueReusableCellWithIdentifier)中提取单元格,然后您可以通过标记,索引,类型或您选择的任何机制访问其子视图。

有点相关的是,您可以拥有多个单元格标识符,这样您就可以根据所拥有的数据创建不同单元格的多个实例。在我的一个项目中,我有4个不同的单元格,每个单元格都取决于它们将显示的数据行数(1到4之间)。这有助于确保平滑的滚动体验,无论单元格有多少行,因为渲染器不必担心动态地动态更改单元格的高度。

答案 2 :(得分:1)

我怀疑您是在cellForRowAtIndexPath方法中以编程方式将标签添加为子视图。您需要确保每次回收单元时都不添加该子视图。而是仅在创建新单元格时创建标签(而不是在回收单元格时),然后将标签值分配给标签,然后在将来再循环时,按标签值检索标签并更改其文本。

答案 3 :(得分:1)

试试这个..

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {

        for (UIView* subView in cell.contentView.subviews)
        {       
            [subView removeFromSuperview];
        }   
       // Your Code to customize cell goes here.
 }