因此,我设置了一个UITableView来显示所有系统语言,用户可以在其中选择一种语言。选择后,单元格将其附件视图设置为复选标记,并将所有其他单元格的附件视图设置为无。但由于某种原因,当选择一个单元格时,另一个单元格也将被随机选择。
例如:我选择英国英语。
但是当我向下滚动(这里显示列表的底部)时,英国美国似乎已经自动选择了自己。
然后当我回滚到顶部时,英国英国人神奇地取消了选择,但西班牙语已被检查过。
以下是ViewController子类的完整源代码:http://pastebin.com/EYNS9ahk
我还尝试实现一个委托方法来检查是否在任何时候无意中选择了tableview,但这不是问题。关于这里发生了什么的任何想法?
答案 0 :(得分:1)
你的代码看起来很好,编写得很好,我想问题可能在于细胞的可重用性,
尝试执行以下更改,
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell_%d",index.row];
UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
如果您仍然遇到同样的问题,请告诉我。
答案 1 :(得分:0)
由于单元格是可重复使用的,因此在滚动时,视口外部的单元格将排队,-tableView:cellForRowAtIndexPath:
将使排队的单元格出列以便重复使用,单元格的属性仍然是排队的状态,因此您需要设置为新状态。
要解决您的问题,您需要记住所选单元格的indexPath或其他可以识别单元格的东西,并在-tableView:cellForRowAtIndexPath:
中为其设置accessoryType,不要依赖-tableView:didSelectRowAtIndexPath:
。