当我点击多行时,如何使复选标记出现并消失?

时间:2013-09-19 11:48:40

标签: ios objective-c uitableview checkbox

我想要一张桌子,当你点击不同的行时,他们会获得或丢失一个复选标记,表明他们已被选中或未被选中。

目前我的tableview将让我选择和取消选择不同的行。但只有点击一个然后再点击另一个时,才会出现勾选标记。当我取消选择时,同样的情况发生,我点击带有复选标记的行,然后单击另一行,复选标记消失。

这是我目前的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * exerciseChoiceSimpleTableIdentifier = @"ExerciseChoiceSimpleTableIdentifier";
    UITableViewCell * exerciseChoiceCell = [tableView dequeueReusableCellWithIdentifier:exerciseChoiceSimpleTableIdentifier];

    if (exerciseChoiceCell == nil) {
        exerciseChoiceCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:exerciseChoiceSimpleTableIdentifier];
    }

    //Here we get each exercise we want to display
    BExercise * exercise = [[_data getExerciseCompleteList] objectAtIndex:indexPath.row];

    //Name the cell after the exercises we want to display
    exerciseChoiceCell.textLabel.text = exercise.name;

    return exerciseChoiceCell;
}

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

    if ([tableView cellForRowAtIndexPath:indexPath].accessoryType == UITableViewCellAccessoryNone)
    {
        // Uncheck the row
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
        [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
    }
    else
    {
    // Check the row
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone;

    }
}

我认为问题在于选择它而不是在内部触摸并在手指从按钮释放时取消选择。

我期待答案非常简单,但关于stackflow的所有类似问题都没有处理勾选标记延迟出现。

理解这个问题的根源以及如何解决它会很棒。

1 个答案:

答案 0 :(得分:1)

更改方法

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

通过

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