这是我的代码,它显示了一个 TableView 的 14 行的问题。对于一个屏幕,6 个单元格是可见的。
当我点击第 2 个单元格时,第 10 个单元格也有一个复选标记,点击第 3 个然后第 11 个复选标记,第 1 个然后第 9 个复选标记,点击第 1 个,然后第 8 个也有复选标记...但是灰色突出显示不会像这样,只有可以突出显示一个单元格。
如果我在同一屏幕上点击一个单元格后点击一个单元格,则刚刚选中的单元格将被清除以进行选中标记,这是有道理的。但是,如果在我点击一个单元格然后向下滚动表格 View 后,我可以点击一个单元格并且它也显示复选标记,即刚刚在顶部屏幕上选中的单元格仍然有一个复选标记。因此,如果我向上和向下滚动,并在滚动到另一侧后每次点击一个单元格,我可以为每个单元格打勾,显示所有勾选标记。
这真的很奇怪,我已经尝试了很多方法来解决它,但似乎我对 UITableView
有一些基本的了解,请问有人能解决吗?谢谢。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID= @"UITableViewCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
}
cell.imageView.image = [UIImage imageNamed:@"earth.png"];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell =[tableView cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell =[tableView cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryNone;
}
最佳答案
您不会将复选标记的存在/不存在存储在任何类型的持久数据源中,也不会在 cellForRowAtIndexPath
中显示/隐藏它。因此,您的表格正在重复使用您的单元格,并且它只是在找到它时将其丢弃。因此,如果它重复使用启用了复选标记附件的单元格,它会将其显示为已启用(因为您没有在 cellForRow
中特别禁用它)
我会保留一个 NSMutableArray
选定的 indexPath
对象。在didSelectRowAtIndexPath
中添加indexPath
,在didDeselectRowAtIndexPath
中移除。然后,在 cellForRowAtIndexPath
中,检查数组中是否存在当前 indexPath
,如果存在,则启用对勾,否则禁用。
关于ios - UITableView,不可见区域的另一个单元格有一个复选标记,而可见区域的一个单元格被触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24018719/