当表重新出现时,UITableView不会自动取消选择所选行

Bes*_*esi 44 iphone cocoa-touch objective-c uitableview ios

通常UITableView,当用户从详细视图中弹回时,将使用动画取消选择a中的选定行.

但是,在我的情况下,我有一个UITableView嵌入式,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];  
}
Run Code Online (Sandbox Code Playgroud)

这是为什么以及如何解决它?

Her*_*erm 68

当你的主ViewController来自UITableViewController类型时,它有一个属性 clearsSelectionOnViewWillAppear,默认是YES- 所以它会自动清除选择.

这个属性不适用于UITableView,我想这是因为它也没有ViewWillAppear方法.

一个UIViewController的,因为它没有也不需要这个属性UITableView本来.

结论:当你不使用时,你必须自己实现它UITableViewController.

  • +1用于了解您的桌面视图属性! (2认同)
  • `[myTableView deselectRowAtIndexPath:[myTableView indexPathForSelectedRow] animated:YES];` (2认同)

jan*_*del 33

取消选择didSelectRowAtIndexPath取代viewWillAppear:

- (void)tableView:(UITableView *)tableView
                  didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
     //show the second view..
     [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
 }
Run Code Online (Sandbox Code Playgroud)

  • 这并不好,因为当用户回来时它不知道它们来自哪里.当弹出以显示用户之前的位置时,它应该激活取消选择. (9认同)

Kev*_*n R 23

在swift中,您可以在您的添加中添加以下行 viewWillAppear

if let row = tableView.indexPathForSelectedRow() {
    tableView.deselectRowAtIndexPath(row, animated: true)
}
Run Code Online (Sandbox Code Playgroud)

在swift 2中,没有parantheses:

if let row = tableView.indexPathForSelectedRow {
    tableView.deselectRowAtIndexPath(row, animated: true)
}
Run Code Online (Sandbox Code Playgroud)

在Swift 4(和3?)中清理了函数名称:

if let indexPath = tableView.indexPathForSelectedRow {
    tableView.deselectRow(at: indexPath, animated: true)
}
Run Code Online (Sandbox Code Playgroud)