清除dequeueReusableCellWithIdentifier单元格

时间:2012-01-03 14:18:54

标签: iphone objective-c ios xcode

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath 
*)indexPath
{
    NSString *CellIdentifier = [NSString stringWithFormat:@"CellName-%d", [indexPath row]];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
    {
        // etc
    }
}

我希望清除我存储的所有单元格,因为表格数据已经更改,因此需要重新生成它们。我故意以这种方式存储所有细胞。

我想知道是否有一种方法/方法可以使所有活着的细胞变得愚蠢,这些细胞与特定的表相关。

此致 -code

4 个答案:

答案 0 :(得分:3)

你不能,当你看到你的代码时,你没有使用任何出列的单元格,因为你为tableview中的每一行创建了一个新的单元格。

这意味着如果您的表中有1000个单元格,则会创建1000个tabelviewcells。这将使你的tableview非常慢,也会占用你的记忆。

当单元格看起来相同时,应该都给出相同的cellIdentifier,然后用您的数据源中的数据填充单元格。 您只应在dequeueReusableCellWithIdentifier:未返回任何单元格时创建新单元格。

然后当调用[self.tableView reloadData]时,您只需从数据源中读取新值并将其填入tableview单元格中。

您的数据源是存储状态而不是单元格的位置,因为我无法想到让您的数据源以这种方式工作的任何其他原因。

答案 1 :(得分:0)

我认为UITableView有方法[tableView reloadData]清除所有单元格。当我在桌面视图中添加数据的app时。我打算这种方法。

答案 2 :(得分:0)

while ([tableView dequeueReusableCellWithIdentifier:@"reuseid"]) {}

答案 3 :(得分:0)

我一直在与此作斗争,解决方案是从superview中删除表视图并完全释放它,因此tableview是dealloced ed

[self.tableView removeFromSuperview];

而不是重新创建一个新的TableView ......这有点残酷,但我需要这个用uiwebviews删除昂贵的单元格