Ios tableView重新加载数据并取消行索引路径

Ios tableView重新加载数据并取消行索引路径,ios,objective-c,uitableview,Ios,Objective C,Uitableview,当返回到中的表视图时,我使用以下代码取消选择选定的表视图单元格-视图将显示:动画 [self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:YES]; 在这种情况下,我还需要重新加载表视图的数据,但当您这样做时,它会清除选定单元格的选定状态,这样您就不会看到任何淡入淡出的动画 是否有办法重新加载表格数据并保留选定状态以创建取消选择动画?在ViewDiLoad中尝试以下操作:

当返回到
中的表视图时,我使用以下代码取消选择选定的表视图单元格-视图将显示:动画

[self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:YES];
在这种情况下,我还需要重新加载表视图的数据,但当您这样做时,它会清除选定单元格的选定状态,这样您就不会看到任何淡入淡出的动画


是否有办法重新加载表格数据并保留选定状态以创建取消选择动画?

在ViewDiLoad中尝试以下操作:

    [self setClearsSelectionOnViewWillAppear:NO];

首先需要重新加载表视图,选择要指示的行,然后执行“取消选择”动画。您遇到的问题是您的操作顺序不正确

您可以使用保存当前选择

NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
[self.tableView reloadData];
[self.tableView selectRowAtIndexPath:selectedRow animated:NO scrollPosition:UITableViewScrollPositionNone];

经过几次尝试,我发现了一些有效的方法。您需要将取消选择设置为在“延迟”(0秒)后发生,以确保它在下一个绘制周期发生并正确设置动画

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    NSIndexPath *indexPath = self.tableView.indexPathForSelectedRow;
    [self.tableView reloadData];
    [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];

    [self performSelector:@selector(deselectRow) withObject:nil afterDelay:0];

}

- (void)deselectRow
{
    [self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:YES];
}

@user2970476提出的显而易见的解决方案似乎在iOS 7上运行良好。对于iOS 8,我稍微修改了@Stonz2的答案,以使用块

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    dispatch_async(dispatch_get_main_queue(), ^(void) {     // necessary for iOS 8
        [self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:YES];
    });
}

我还必须设置self.clearselectiononviewwillappear=NO
viewdiload
中,因为IB设置被忽略。

NSUserDefaults太重了吗?请参阅@MikeTaverne。问题不是保持选择状态,而是在
视图出现时以动画方式将其关闭,同时重新加载数据。我知道如何维护动画的唯一方法是在
viewwillbeen
中重新加载表格,然后在
viewdidebeen
中执行动画,或者反之亦然。很有趣,好吧。我认为这篇文章提出了一种在重新加载后手动选择行的技术。如果你这样做,然后用动画取消选择,这会给你想要的效果吗?我已经试过了。我重新加载,在没有动画的情况下再次设置选定的单元格(重新加载将清除该单元格),然后使用动画设置为“未选定”。它没有动画。@BerryBlue可能是时间问题。您是否尝试过在
viewdide
中执行取消选择?在
viewwillbeen
中重新加载表格时,这没有帮助,因为重新加载将清除所选单元格。正如几分钟前另一个答案的注释中所述,已尝试过此操作。取消选择仍然不会设置动画。