第三次选择相同的UITableViewCell将不会高亮显示和添加accessoryCheckmark


  1. 当我想突出显示并在所选单元格旁边打上复选标记时,下面的代码就可以工作了。

  2. 当我想选择另一个单元格时,它也会起作用,因为它取消选择最后一个单元格或高亮显示,并在新选择的单元格旁边打上复选标记并高亮显示。

  3. 当我重新选择一个选定的单元格时,它也会起作用,因为它取消了选择,在UITable中不留下复选标记和突出显示。

  4. 然而,当我第三次选择同一个单元格时(也就是说,我第一次选择它时,代码会高亮显示它,并在它旁边打一个复选标记。我第二次选择相同的单元格时,它删除了高亮显示和复选标记,现在是我第三次选择相同的单元格(,它会高亮显示该单元格几分之一秒,然后高亮显示消失。单元格旁边的复选标记也从未显示,就好像我刚刚取消选择它一样。无论我选择同一单元格多少次,它都不会突出显示它,也不会在它旁边打复选标记。实现这一点的唯一方法是先选择另一个单元格,然后重新选择原始单元格。请帮忙。

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
    {
        // select new
        UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        [cell setSelected:TRUE animated:TRUE];
        // deselect old
        UITableViewCell *old = [self.tableView cellForRowAtIndexPath:self.lastSelected];
        old.accessoryType = UITableViewCellAccessoryNone;
        [old setSelected:FALSE animated:TRUE];
    
        // keep track of the last selected cell      
        self.lastSelected = indexPath;
    }
    

我通过情节提要构建了UITableView。

只是对逻辑的一个小调整:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    if (self.lastSelected && (self.lastSelected.row == indexPath.row)) {
        cell.accessoryType = UITableViewCellAccessoryNone;
        [cell setSelected:NO animated:TRUE];
        self.lastSelected = nil;
    } else {
       cell.accessoryType = UITableViewCellAccessoryCheckmark;
       [cell setSelected:TRUE animated:TRUE];
        UITableViewCell *old = [self.tableView cellForRowAtIndexPath:self.lastSelected];
        old.accessoryType = UITableViewCellAccessoryNone;
        [old setSelected:NO animated:TRUE];
        self.lastSelected = indexPath;
    }
}

最新更新