-
当我想突出显示并在所选单元格旁边打上复选标记时,下面的代码就可以工作了。
-
当我想选择另一个单元格时,它也会起作用,因为它取消选择最后一个单元格或高亮显示,并在新选择的单元格旁边打上复选标记并高亮显示。
-
当我重新选择一个选定的单元格时,它也会起作用,因为它取消了选择,在UITable中不留下复选标记和突出显示。
-
然而,当我第三次选择同一个单元格时(也就是说,我第一次选择它时,代码会高亮显示它,并在它旁边打一个复选标记。我第二次选择相同的单元格时,它删除了高亮显示和复选标记,现在是我第三次选择相同的单元格(,它会高亮显示该单元格几分之一秒,然后高亮显示消失。单元格旁边的复选标记也从未显示,就好像我刚刚取消选择它一样。无论我选择同一单元格多少次,它都不会突出显示它,也不会在它旁边打复选标记。实现这一点的唯一方法是先选择另一个单元格,然后重新选择原始单元格。请帮忙。
- (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;
}
}