UITableViewCellAccessoryCheckmark重复单元格

时间:2016-09-26 08:59:25

标签: ios objective-c uitableview

我已尝试过本网站提供的每一个选项,但这些问题似乎都没有奏效。 如果我向下滚动,我会看到勾选标记。如果我向上滚动我的选择的定位是不一样的。
因为问题是相同的,我想再次打开这个问题作为一个新的开始。我是这样做的:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    myTableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    if (![selectedDX containsObject:myMutArray[indexPath.row]])
    {
        [selectedDX addObject:myMutArray[indexPath.row]];
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }

}
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath {

    myTableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    if ([selectedDX containsObject:myMutArray[indexPath.row]]) {
        [selectedDX removeObject:myMutArray[indexPath.row]];
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
}

我也在一个didSelectRowAtIndexPath方法中尝试了它,但结果是一样的。

3 个答案:

答案 0 :(得分:3)

cellForRowAtIndexPath中返回单元格时,是否正确设置了附件类型?在我看来,只有当用户点击一个单元时才设置附件,但这还不够。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    [...]

    if ([selectedDX containsObject:myMutArray[indexPath.row]])
    {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    else
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

    [...]
}

在表格视图中滚动时,将重复使用您的单元格。因此,一个单元格可以重复用于多个项目。这意味着配件也可以重复使用。因此,当您滚动并且不从单元格中移除附件时,它仍将具有复选标记。

您还可以在自定义prepareForReuse子类中的UITableViewCell方法中重置附件

答案 1 :(得分:2)

cellForRowAtIndexPath

中添加条件
 if([selectedDX containsObject:allCodeLabel[indexPath.row]])
    {
        cell.accessoryType = UITableViewCellAccessoryType.Checkmark
    }
    else
    {
        cell.accessoryType = UITableViewCellAccessoryType.None
    }

它对我有用。希望它有帮助:)

答案 2 :(得分:1)

你可以像这样处理它:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

   WCategoriesTableViewCell* cell = [tableView
                              cellForRowAtIndexPath:indexPath];

   if (cell.accessoryType == UITableViewCellAccessoryNone)
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
   else
    cell.accessoryType = UITableViewCellAccessoryNone;
}