当单元格第一次变得可见时,将使用 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 的单元格?
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 |