直到iOS 8和Xcode 6,我能够像Apple的设置一样使用UITableViewController来配置我的应用程序。在从一个表到调用表的segue'中,我将重新加载调用表以更新单元格中的数据,重新选择调用行,然后让视图显示为动画以清除选择。
这是我一直在使用的viewWillAppear方法中的代码:
[self.tableView reloadData];
[self.tableView selectRowAtIndexPath:lastselected animated:YES scrollPosition:UITableViewScrollPositionNone];
[super viewWillAppear:animated];
在更新单元格数据时,不会发生所选行/单元格的缓慢消失。它会立即被有效清除。我已经尝试了我能想到的一切,但却无法实现这一点。请帮忙......
发生了什么变化,我怎样才能恢复过去?
谢谢。
答案 0 :(得分:0)
viewWillAppear
。因此,如果从该方法内部触发,您将无法正常工作。改为使用viewDidAppear
,您应该会在转换时看到更可靠的动画。如果您觉得发生得太快,可能会延迟使用performSelector
。
就个人而言,在这种情况下,我首先打电话给[super viewDidAppear:animated];
。我看不出它为什么会低于其他代码行的原因。
同样只是因为我100%清楚... viewWillAppear
显然可以重新加载tableView所以让我们这样做......
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.tableView reloadData];
}
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self.tableView selectRowAtIndexPath:lastSelected animated:YES scrollPosition:UITableViewScrollPositionNone];
}
或者在viewDidAppear上执行选择器延迟......
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self performSelector:@selector(animateCellSelectionAtIndexPath:) withObject:lastSelected afterDelay:0.2f];
}
-(void)animateCellSelectionAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
}