ios - UITableView,不可见区域的另一个单元格有一个复选标记,而可见区域的一个单元格被触摸

标签 ios objective-c uitableview

这是我的代码,它显示了一个 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/

相关文章:

ios - 移除移动的 GMSPolyline 线段

ios - 单元格标签文本在单元格中重叠

ios - iOS8 上的自动布局错误,但 iOS9 上没有

ios - UIView 子类及其 subview 的 IBAction

ios - 返回的对象类型与函数体 swift objc 中的对象类型不同

iphone - objective-c UIAlert 按钮不起作用

ios - 我想在 ios 中加载图像之前显示事件指示器

ios - 将表格单元格图像定位到左边框

iOS 8 点击 UITextView 会卡住应用程序

ios - tableView 中的自定义分隔符