在 UITableViewCell 中使用备用附件类型

Posted

技术标签:

【中文标题】在 UITableViewCell 中使用备用附件类型【英文标题】:Using alternate accessoryType in UITableViewCell 【发布时间】:2010-08-29 08:40:36 【问题描述】:

我基本上想根据某些情况显示一个 UITableViewCellAccessoryDisclosureIndicator,在这种情况下,我的行数据中存在一个 URL(我通过 indexPath.row 引用它。

我有正确的代码来解决这个问题(即,如果 URL 存在),但我不确定我应该在“cellForRowAtIndexPath:”方法中的何处声明此代码。我在 if(cell == nil) 子句内部和外部都试过了,当单元格从滚动返回到视图中时,有时会在有或没有指示符的情况下重绘单元格。

它在初始绘制时工作正常。

关于如何最好地实现这一点的任何提示?

【问题讨论】:

【参考方案1】:

是的,您应该将它放在“if (cell == nil)”语句之外的 cellForRowAtIndexPath: 委托方法中。由于细胞被回收利用,您必须确保每个细胞的附件类型都设置为正确的值,而不仅仅是需要特定附件类型的那些。

例如:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)ip 
    UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:@"CELL"];

    if (cell == nil) 
        cell = [[[UITableView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CELL"] autorelease];
    

    if (ip.row == 3) 
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    

    return cell;

此代码无法按我们希望的方式运行。由于单元格被回收,附件类型设置为 UITableViewCellAccessoryDisclosureIndicator 的单元格稍后将在未定义的行中重复使用,然后会显示一个披露指示符,即使它不在第 3 行。

为了处理单元格重用,我们必须为每个单元格设置附件类型,无论它们的行是什么:

    if (ip.row == 3) 
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
    else 
        cell.accessoryType = UiTableViewCellAccessoryNone;
    

我不确定这是否能解释您的问题,但它看起来确实与细胞重复使用有关。

编辑:

好的,您在我输入答案时自己找到了解决方案。 :o)

【讨论】:

【参考方案2】:

检查您的条件后不久,您可以通过 indexPath 设置您感兴趣的单元格。然后,也许你想打电话给reloadData

【讨论】:

这实际上就是我正在做的事情——我认为没有必要重新加载数据,因为没有新数据需要重新加载。我只是希望该行显示或不显示基于现有数据的指标...它显示正确的标签,那么为什么不显示正确的指标呢? 强制重绘是一种权宜之计【参考方案3】:

毕竟答案很简单。当 URL 出现时,我正在设置 UITableViewCellAccessoryDisclosureIndicator。如果没有 URL,我没有做的是设置 UITableViewCellAccessoryNone 。因此,在重绘时,它会记住设置为 on 的一行。

【讨论】:

以上是关于在 UITableViewCell 中使用备用附件类型的主要内容,如果未能解决你的问题,请参考以下文章

在 UITableViewCell 的附件视图中使用自定义按钮的问题

获取 UITableViewCell 详细附件视图的图像

如何在 UITableViewCell 中获得透明的附件视图? (带截图)

UITableViewCell 在自定义单元格中具有备用背景颜色

当附件是UITableViewCellAccessoryCheckmark时,如何将文本置于UITableViewCell中

如何在 Swift 3 中保存 UITableViewCell 附件复选标记的状态