我正在使用自定义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;
}
答案 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.
}