在 UITableView 上延迟 reloadData

Posted

技术标签:

【中文标题】在 UITableView 上延迟 reloadData【英文标题】:Delay reloadData on UITableView 【发布时间】:2010-12-01 20:32:25 【问题描述】:

我有一个 UITableView。点击一个按钮,我想显示我的自定义视图,然后,一旦视图可见,从 tableview 中删除特定项目。自定义视图隐藏了 tableview,所以我希望在这个新视图可见后进行删除。

目前,我有这个,它添加了自定义视图,然后应该删除该项目,并重新加载表格,但是在动画结束时重新加载(我有一个动画块,更改视图 alpha),所以我可以看到更新。

[self.view addSubview:customView];
[itemArray removeObject:object];
[self.tableView reloadData];

如何才能延迟重新加载,直到视图可见?

谢谢。

【问题讨论】:

【参考方案1】:

尝试将 reloadData 添加到viewDidAppear

-(void) viewDidAppear:(BOOL)animated 
    [super viewDidAppear:animated];
    [self.tableView reloadData];

这应该会给你所需的延迟。

【讨论】:

【参考方案2】:

您提到您自己正在为视图设置动画;当动画完成时,您应该调用reloadData,方法是:

[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(methodThatCallsReloadData)];

// or even
[UIView setAnimationDelegate:self.tableView];
[UIView setAnimationDidStopSelector:@selector(reloadData)];

或者如果您使用的是基于块的 API:

[UIView animateWithDuration:... completion:^(BOOL finished) 
    [self.tableView reloadData];
];

【讨论】:

谢谢这很好用。我更喜欢 blocks API,但由于它只有 4.0+,我的 3.2 用户会崩溃【参考方案3】:

或者你可以使用 performSelector 方法:

[self performSelector:@selector(myOtherMethod) withObject:nil afterDelay:1.5];

【讨论】:

以上是关于在 UITableView 上延迟 reloadData的主要内容,如果未能解决你的问题,请参考以下文章

UItableView滚动到特定位置

在 iOS Carplay 中延迟加载数据

iOS:在 reloadData 时保持 UITableView 在同一位置

在具有滚动索引的 UITableView 中延迟加载图像

使用 Alamofire 在 UITableview 中延迟加载 API 请求

UITableView 延迟加载问题