表格中的复选标记仅在第二次触摸设备后消失

时间:2012-02-03 12:47:43

标签: iphone uitableview ios5 ios-simulator

滚动时我的勾选标记出现并正确消失,它在模拟器上完美运行。

然而,在设备上,4s,使复选标记再次消失的触摸不能正常工作。意思是,我需要触摸行,我希望复选标记消失两次。只有在第二次触摸后,复选标记才会消失。

此外,所有选定的列都保留蓝色背景,直到我再次触摸它们。

所以这是序列(在设备上):

  1. 选择了触摸行,蓝色背景,复选标记出现
  2. 触摸同一行蓝色背景消失,复选标记仍然
  3. 触摸同一行,复选标记消失,蓝色背景
  4. 我绝对需要的是,一旦我再次触摸该行,复选标记就会消失,实际上我在模拟器上的行为。

    我想我可以通过didDeselectRow方法控制背景。但是,我在想象中如何控制复选标记问题。任何想法??

    以下是didSelectRowAtIndexPath的代码:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
    NSInteger thisCardID;
    NSInteger thisCardIndex;
    NSString *cellValue;
    
    UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];
    cellValue = thisCell.textLabel.text;
    
    if(searching) {             
        thisCardID = [[self.aCopyOfCardIDArray objectAtIndex:indexPath.row] integerValue];
        thisCardIndex = [self.aCopyOfCardIDArray indexOfObject:[NSNumber numberWithInteger:thisCardID]];
        if (thisCell.accessoryType == UITableViewCellAccessoryNone) {            
            [self.searchedSelectedRowArray replaceObjectAtIndex:thisCardIndex withObject:@"YES"];
            thisCell.accessoryType = UITableViewCellAccessoryCheckmark;
            [self.searchedSelectedCardIDs addObject:[NSNumber numberWithUnsignedInteger :thisCardID]];
        }
        else {
            [self.searchedSelectedRowArray replaceObjectAtIndex:thisCardIndex withObject:@"NO"];
            thisCell.accessoryType = UITableViewCellAccessoryNone;
            [self.searchedSelectedCardIDs removeObject:[NSNumber numberWithUnsignedInteger:thisCardID]];
        }
    
    } 
    else {
        thisCardIndex = [self.tempCardArray indexOfObject:cellValue];
    
        if (thisCell.accessoryType == UITableViewCellAccessoryNone) {            
            [self.selectedRowArray replaceObjectAtIndex:thisCardIndex withObject:@"YES"];
            thisCell.accessoryType = UITableViewCellAccessoryCheckmark;
            [self.selectedCardIDs addObject:[NSNumber numberWithUnsignedInteger :thisCardID]];
        }
        else {
            [self.selectedRowArray replaceObjectAtIndex:thisCardIndex withObject:@"NO"];
            thisCell.accessoryType = UITableViewCellAccessoryNone;
            [self.selectedCardIDs removeObject:[NSNumber numberWithUnsignedInteger:thisCardID]];
        }
    }
    
    
    }
    

    为了确保我自己清楚,我添加了一些屏幕截图:

    Table before selecting a row

    Table after touching the row the first time

    Table after touching the same row again

    Table after I multi selected some rows and touched some rows again to deselect

1 个答案:

答案 0 :(得分:2)

早到睡觉和Heureka,这是做魔法的didDeselectRowAtIndexPath。这就是为什么第二次触摸不被didSelect ...方法识别的原因。逻辑,如果你知道的话:-) 现在是时候算羊了......

这里是代码:

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