无法取消选中在cellForRowAtIndexPath中设置的复选标记

时间:2015-05-13 05:10:35

标签: ios objective-c uitableview

我有一个视图控制器,您可以在其中更改性别。我有一个tableview加载了一个数组,只有两个字符串,男性或女性。

如果用户最初设置为女性,那么女性单元格上有一个复选标记。然后,当您点击男性细胞时,应检查男性细胞,并且应该取消选中女性细胞。

我的逻辑几乎正常,但是当我第一次点击未经检查的单元格(男性单元格)时,选中的单元格不会取消选中(因此检查男性和女性)。但之后我再次选择一个单元格,它可以根据需要运行。

如何修复此错误...它只会在我第一次点击未经检查的单元格时生成,然后才能正常工作。

我经历了很多SO链接,但仍然得到了相同的结果。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"genderCell"];
    cell.textLabel.text = self.genderArray[indexPath.row];

    if (([UserParseHelper currentUser].gender = @"Female"))
    {
        if (indexPath.row == 1)
        {
            cell.accessoryType = UITableViewCellAccessoryCheckmark;
        }
    }
    else if (([UserParseHelper currentUser].gender = @"Male"))
    {
        if (indexPath.row == 0)
        {
            cell.accessoryType = UITableViewCellAccessoryCheckmark;
        }
    }

    return cell;
}

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

    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
}

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone;
}

enter image description here

1 个答案:

答案 0 :(得分:0)

所有相同只是在didSelectRowAtIndexPath方法中更改当前用户的性别。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row==0)
        [UserParseHelper currentUser].gender = @"Male";
    else if(indexPath.row==1)
        [UserParseHelper currentUser].gender = @"Female";
    [tableView reloadData];
}

无需didDeselectRowAtIndexPath方法

/*-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone;
}*/
相关问题