正如上面的答案所指出的,您需要显式取消 Select 该行.关于如何做到这一点,你有两个 Select .首先,在 Select 后立即取消 Select 行:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
...
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
这将很好地工作,但有一种替代方法,它是UITableViewController
所采取的方法,即保留选中的行,然后在视图重新出现时取消选中它(在您正在推的控制器从堆栈中弹出后).
这有一个微小的优势,当用户返回时,可以看到他们之前 Select 的内容,因此可以看到他们之前 Select 的内容.
要实现这一点,只需覆盖viewWillAppear
:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}
正如我所说的,这是UITableViewController
's viewWillAppear:
的默认实现所做的.如果您使用UITableViewController
和not看到这种行为,您应该判断您是否在自己的类的viewDidAppear:
中调用super
实现.
Update (30 Oct 2013):嗯,这是一个流行的答案!正如Ben在 comments 中正确指出的那样,UtableViewController实际上是在viewWillAppear:
而不是viewDidAppear:
中完成的——这是正确的时机.此外,可以使用UITableViewController的clearsSelectionOnViewWillAppear
属性打开和关闭此行为.为了反映这一点,我修改了上面的答案.