当我使用以下内容向单元格添加标签时:
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[cell addSubView:someLabel];
}
它将标签添加到多个单元格,因为它将标签添加到缓存的单元格。因此tableView中使用缓存单元格的每个单元格都将显示我的标签。
有人知道解决方法吗? 吨
答案 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];
删除缓存单元格的所有子视图。