1
  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;
    
    }
    

我通过 Storyboard 构建了 UITableView。

4

1 回答 1

1

只是对那里的逻辑进行了小幅调整:

- (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;
    }
}
于 2013-01-18T07:11:05.463 回答