当表重新出现时,UITableView不会自动取消选定的行
正常情况下,当用户从细节视图中popup时, UITableView
的选定行将被取消selectanimation。
但是,在我的情况下,我有一个UITableView
embedded到UIViewController
我必须在viewWillAppear
手动执行它,如下所示:
-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; // For some reason the tableview does not do it automatically [self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:YES]; }
为什么是这个以及如何解决?
当你的主ViewController是从typesUITableViewController ,它有一个属性 clearsSelectionOnViewWillAppear
,这是默认YES
– 所以它会自动清除select。
这个属性不可用于UITableView ,我想这是因为它没有ViewWillAppear
方法。
UIViewController不需要这个属性,因为它最初没有UITableView
。
结论:当你不使用UITableViewController
时,你必须自己实现它。
在didSelectRowAtIndexPath
而不是viewWillAppear
取消select:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ //show the second view.. [tableView deselectRowAtIndexPath:indexPath animated:YES]; }
在swift中,您可以在viewWillAppear
添加以下行
if let row = tableView.indexPathForSelectedRow() { self.tableView.deselectRowAtIndexPath(row, animated: false) }
在迅速2,它没有派生:
if let row = tableView.indexPathForSelectedRow { self.tableView.deselectRowAtIndexPath(row, animated: false) }
我不认为取消选定的行是自动的…我通常在推入下一个视图之前
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [tableView deselectRowAtIndexPath:indexPath animated:YES]; // to do other things [self.navigationController pushViewController:yourNextViewController animated:YES]; }
在Swift 3/4
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) }
没有什么是错的 – 取消选中突出显示的行始终是“手动”。 如果你看看苹果的示例代码,你会看到同样的事情。