在UITableViewCell中使用备用accessoryType

时间:2010-08-29 08:40:36

标签: iphone uitableview accessorytype

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

我有正确的代码来解决这个问题(即如果存在URL),但我不确定在“cellForRowAtIndexPath:”方法中我应该在哪里说明这段代码。我已经在if(cell == nil)子句内部及其外部尝试了它,并且当单元格从滚动状态返回到视图时,有时在有或没有指示符的情况下重新绘制单元格。

在初始抽奖时效果很好。

关于如何才能最好地实现这一目标的任何提示?

3 个答案:

答案 0 :(得分:2)

是的,您应该将它放在cellForRowAtIndexPath:委托方法中,在“if(cell == nil)”语句之外。由于电池是循环使用的,因此您必须确保每个电池的配件类型设置为正确的值,而不仅仅是需要特定配件类型的配件类型。

例如:

- (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)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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