重新加载表和清除单元行选择

时间:2014-11-03 18:54:00

标签: uitableview ios8 xcode6

直到iOS 8和Xcode 6,我能够像Apple的设置一样使用UITableViewController来配置我的应用程序。在从一个表到调用表的segue'中,我将重新加载调用表以更新单元格中的数据,重新选择调用行,然后让视图显示为动画以清除选择。

这是我一直在使用的viewWillAppear方法中的代码:

[self.tableView reloadData];
[self.tableView selectRowAtIndexPath:lastselected animated:YES scrollPosition:UITableViewScrollPositionNone];
[super viewWillAppear:animated];

在更新单元格数据时,不会发生所选行/单元格的缓慢消失。它会立即被有效清除。我已经尝试了我能想到的一切,但却无法实现这一点。请帮忙......

发生了什么变化,我怎样才能恢复过去?

谢谢。

1 个答案:

答案 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];
}