我基本上是想根据特定的情况显示一个UITableViewCellAccessoryDisclosureIndicator,在本例中,我的行数据中存在一个URL (我通过indexPath.row引用它。
我有正确的代码来解决这个问题(例如,如果一个网址存在),但是我不确定我应该在"cellForRowAtIndexPath:“方法中的什么地方声明这个代码。我在if(单元格== nil)子句内部和外部尝试过,两次都会在单元格滚动返回视图时重新绘制单元格,有时会有或没有指示符。
它在初始绘制时工作得很好。
关于如何最好地实现这一点,有什么建议吗?
发布于 2010-08-29 16:59:44
是的,你应该把它放在"if (cellForRowAtIndexPath == nil)“语句之外的cellForRowAtIndexPath: delegate方法中。由于单元被回收,您必须确保将每个单元的附件类型设置为正确的值,而不仅仅是那些需要特定附件类型的单元。
例如:
- (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)
发布于 2010-08-29 16:47:26
检查完条件后,很快就可以通过indexPath设置您感兴趣的单元格。然后,也许你想调用reloadData。
发布于 2010-08-29 16:54:58
答案毕竟很简单。当URL存在时,我正在设置UITableViewCellAccessoryDisclosureIndicator。我没有做的就是在没有网址的情况下设置一个UITableViewCellAccessoryNone。因此,在重绘时,它会记住一行并将其设置为on。
https://stackoverflow.com/questions/3594104
复制相似问题