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

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

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

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

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

【问题讨论】:

    标签: iphone uitableview accessorytype


    【解决方案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 的一行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-28
        • 2010-12-17
        • 2011-09-28
        相关资源
        最近更新 更多