iPhone cellForRowAtIndexPath返回缓存的单元格

时间:2010-02-28 21:11:22

标签: iphone caching uitableview label subview

当我使用以下内容向单元格添加标签时:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    [cell addSubView:someLabel];
}

它将标签添加到多个单元格,因为它将标签添加到缓存的单元格。因此tableView中使用缓存单元格的每个单元格都将显示我的标签。

有人知道解决方法吗? 吨

5 个答案:

答案 0 :(得分:2)

提供唯一标识符名称,如:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    static NSString *CellIdentifier = NSLocalizedString(@"Cell",@"");
…
}

而不是提供常量标识符名称,请提供您自己的唯一标识符名称,如:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{

    static NSString *CellIdentifier = [self getuniqueID];
...
}

这将解决您的问题。

答案 1 :(得分:1)

如果您的单元格是UITableViewCell的子类,则可以覆盖在- (void)prepareForReuse

返回单元格之前调用的- (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier

这是为您的单元格提供“干净的平板”的方法,但只提供即将重复使用的缓存平板。

答案 2 :(得分:1)

为什么不简化事情,只是默认隐藏标签并将其包含在所有单元格中。

当你点击单元格时,不是添加视图 - 只显示那里但隐藏的那个。

完成后,隐藏标签。

答案 3 :(得分:0)

您需要跟踪每个单元格是否具有当前应用的标签。在cellForRowAtIndexPath:中检查是否应该在那里,如果有,请在必要时添加,否则在必要时将其删除。

答案 4 :(得分:0)

我有时会使用这段代码:(当单元格!= nil时)

NSArray *subviews = [[NSArray alloc] initWithArray:cell.contentView.subviews];
for (UIView *subview in subviews) {
    [subview removeFromSuperview];
}
[subviews release];

删除缓存单元格的所有子视图。