在返回-viewWillAppear:animated
中的表格视图时,我使用以下代码取消选择选定的表格视图单元格。
[self.tableView deselectRowAtIndexPath:self.tableView.indexPathForSelectedRow animated:YES];
在这种情况下我还需要重新加载表格视图的数据,但是当你这样做时它会清除所选单元格的选定状态,这样你就不会看到任何淡入淡出的动画。
有没有办法重新加载表数据并保留选定状态以创建取消选择动画?
答案 0 :(得分:4)
经过多次尝试,我发现了一些有效的方法。您需要将取消选择设置为在"延迟"之后发生。 (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];
}
答案 1 :(得分:1)
在viewDidLoad中尝试此操作:
[self setClearsSelectionOnViewWillAppear:NO];
答案 2 :(得分:1)
@ 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.clearsSelectionOnViewWillAppear = NO;
中设置viewDidLoad
,因为IB设置被忽略了。
答案 3 :(得分:0)
您需要先重新加载表格视图,选择要指定的行,然后执行取消选择动画。您遇到的问题是您的操作顺序不正确。
答案 4 :(得分:0)
您可以使用
保存当前选择NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
[self.tableView reloadData];
[self.tableView selectRowAtIndexPath:selectedRow animated:NO scrollPosition:UITableViewScrollPositionNone];