gpt4 book ai didi

objective-c - UITableView 删除所有可重用的单元格

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:13:21 27 4
gpt4 key购买 nike

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

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

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

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

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

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

假设我将 index 改回:

NSInteger index = indexPath.row;

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

如果答案是They CAN be dequeued 我还有一个问题:

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

最佳答案

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

,它只会对可见单元格进行出列,而不是所有 200 个单元格

这是来自 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;

更新 2:如果您没有使用 ARC,那应该是,

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

你需要有一个 autorelease

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com