为iPhone创建清单(类似于TouchCells示例代码)的问题。检查随机单元格

时间:2009-10-24 22:47:14

标签: iphone objective-c uitableview

我在使用Apple示例代码创建TouchCells示例样式的清单时遇到了问题。基本上,它是一个允许多个项目选择的表格,并为每个选定的项目提供一个复选标记。

我遇到的问题是,当我选择一个项目然后向下滚动屏幕时,将随机选择另一个项目(屏幕外)。它似乎通常是下一个要加载到屏幕上的单元格。

我无法弄清楚我做错了什么,所以我用Apple的TouchCells代码测试了它。但是在他们的节目中,他们只有6个单元格,没有滚动的空间。因此,我复制了plist文件中的一些项目以生成更多单元格......弹出同样的问题。如果选择一个单元格然后滚动,将随机选择另一个单元格。

更新我最近尝试了一款名为“Checks”的iPhone Dev Cookbook示例代码......你猜对了,同样的问题。这是链接:http://code.google.com/p/cookbooksamples/downloads/list

这让我疯了。这是一个错误还是我做错了什么?有谁知道如何解决这个问题?

谢谢!

另外,有没有人知道任何示例代码如何执行此操作?

3 个答案:

答案 0 :(得分:3)

你可能正在这样做:

if (whatever) {
  cell.accessoryType = UITableViewCellAccessoryCheckMark;
}

当你应该这样做时:

if (whatever) {
  cell.accessoryType = UITableViewCellAccessoryCheckMark;
} else {
  cell.accessoryType = UITableViewCellAccessoryNone;
}

如果您使用的是自定义单元格,则可以覆盖prepareForeReuse:

- (void)prepareForReuse {
  [super prepareForReuse];
  self.accessoryType = UITableViewCellAccessoryNone;
}

答案 1 :(得分:1)

我在我的应用中遇到了与自定义UITableViewCell类似的问题。根据{{​​3}}上的Apple文档:“您应该只重置与内容无关的单元格属性,例如,alpha,编辑和选择状态。”

TouchCells示例与选择状态有关,但它们使用布尔值和图像来模拟选择。到目前为止,我发现唯一能够工作的是为每个单元使用唯一的重用标识符。有点打败了重用的目的,不是吗?

例如,要解决TouchCells示例中的问题,请替换:

static NSString *kCustomCellID = @"MyCellID";

使用:

NSString *kCustomCellID = [NSString stringWithFormat:@"MyCellID%d", indexPath.row];

我想如果你有少量细胞就可以了,但是必须有更好的方法,对吗?

答案 2 :(得分:0)

经过痛苦的深夜搜索后找到解决方案......

在CustomCell.m中的checkAction函数中(参考TouchCells示例)使用setBackgroundImage而不是setImage。