OGeek|极客世界-中国程序员成长平台

标题: objective-c - UITableView 删除所有可重复使用的单元格 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 17:03
标题: objective-c - UITableView 删除所有可重复使用的单元格

当单元格第一次变得可见时,将使用 init 方法。 当单元格不是第一次变得可见时,它将从 TableView 的内存中出列。

UITableViewCell *cell = [searchTable dequeueReusableCellWithIdentifier:identifier];
if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
}
return cell;

假设我已经滚动了整个表格,现在任何单元格都可以出列,因为它们都已经被初始化了。

我当前的单元格的标识符从 0 到 199。我刷新了我的表格 View ,现在我有了新的单元格信息。我使用方法 reloadData 并通过将 +200 添加到单元格标识符来为新单元格使用从 200 到 399 的标识符:

NSInteger index = indexPath.row + 200;
NSString *CellIdentifier = [NSString stringWithFormat"%d",index];

现在我滚动整个表格并查看从 200 到 399 的单元格。

假设我将 index 改回:

NSInteger index = indexPath.row;

现在一个问题:标识符从 0 到 199 的旧单元仍然可以出队,不是吗?

如果答案是他们可以出队我还有一个问题:

当我开始使用标识符为 200 到 399 的单元格时,有没有办法从 TableView 内存中删除标识符为 0 到 199 的单元格?



Best Answer-推荐答案


UITableView dequeueReusableCellWithIdentifier 方法将为您处理。如果您使用 static [iTableView dequeueReusableCellWithIdentifier:cellIdentifier];

这是来自 apple discussion thread 的讨论.也检查一下。

更新: 您需要修改您的单元格标识符。如果要为每一行创建新的 CellIdentifier,则使用 dequeueReusableCellWithIdentifier 毫无意义,因为标识符每次都不同。

代替

NSString *CellIdentifier = [NSString stringWithFormat"%d",index];

应该是,

static NSString *CellIdentifier = [NSString stringWithString@"cell"];

这意味着一旦不可见,每个单元格都将被重复使用。它只会选择不可见的单元格,并将其重用于您正在显示的下一组单元格。根据您的实现,它将创建 300 或 400 个单元格,您无法删除以前的单元格,因为您不再有任何引用。

您的方法将如下所示,

static NSString *CellIdentifier = [NSString stringWithString@"cell"];
UITableViewCell *cell = [searchTable dequeueReusableCellWithIdentifier:Cellidentifier];
if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:Cellidentifier];
}
cell.textLabel.text = @"something";
//...
return cell;

Update2:如果你没有使用 ARC,应该是,

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:Cellidentifier] autorelease]; 

你需要一个 autorelease 来做同样的事情。

关于objective-c - UITableView 删除所有可重复使用的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12870171/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4