我在使用Apple示例代码创建TouchCells示例样式的清单时遇到了问题。基本上,它是一个允许多个项目选择的表格,并为每个选定的项目提供一个复选标记。
我遇到的问题是,当我选择一个项目然后向下滚动屏幕时,将随机选择另一个项目(屏幕外)。它似乎通常是下一个要加载到屏幕上的单元格。
我无法弄清楚我做错了什么,所以我用Apple的TouchCells代码测试了它。但是在他们的节目中,他们只有6个单元格,没有滚动的空间。因此,我复制了plist文件中的一些项目以生成更多单元格......弹出同样的问题。如果选择一个单元格然后滚动,将随机选择另一个单元格。
更新我最近尝试了一款名为“Checks”的iPhone Dev Cookbook示例代码......你猜对了,同样的问题。这是链接:http://code.google.com/p/cookbooksamples/downloads/list
这让我疯了。这是一个错误还是我做错了什么?有谁知道如何解决这个问题?
谢谢!
另外,有没有人知道任何示例代码如何执行此操作?
答案 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。