使用UITableView是如何判断reloadData加载数据已经结束

stackoverflow上有人提问这样的问题

http://stackoverflow.com/questions/16071503/how-to-tell-when-uitableview-has-completed-reloaddata

如果在reloadDate后需要立即获取tableview的cell、高度,或者需要滚动tableview,那么,直接在reloadData后执行代码是有可能出问题的。

reloadDate并不会等待tableview更新结束后才返回,而是立即返回,然后去计算表高度,获取cell等。

如果表中的数据非常大,在一个run loop周期没执行完,这时,需要tableview视图数据的操作就会出问题了。

apple并没有直接提供reloadData的api,想要程序延迟到reloadData结束在操作,可以用以下方法

方法1:

[self.tableView reloadData];
[self.tableView layoutIfNeeded];
//刷新完成  

layoutIfNeeded会强制重绘并等待完成。

方法2:

[self.tableView reloadData];
dispatch_async(dispatch_get_main_queue(), ^{
    //刷新完成
});  

reloadDate会在主队列执行,而dispatch_get_main_queue会等待机会,直到主队列空闲才执行

时间: 2024-10-14 06:18:41

使用UITableView是如何判断reloadData加载数据已经结束的相关文章

聊天列表在reloadData时无法成功加载数据

在项目开发的过程中遇到这样一个问题,iPhone6上聊天列表在reloadData时无法成功加载数据,但是只要手指滑动UITableView即可成功加载. 期初被该问题给困惑住了,始终没搞明白是啥问题,后在网上查询资料终找到问题之所在并解决该问题.现将问题的分析及解决方案贴出来: 1.在子线程中无法进行UI的更新,如果表象更新成功那只是一个幻象.因为在子线程中,代码执行完毕后会自动进入主线程,从而执行子线程中UI更新的函数,这个过程是非常快速的,导致大家误以为子线程可以更新UI.如果子线程一直在

Webbrowser控件判断网页加载完毕的简单方法

一般情况下,当ReadyState属性变成READYSTATE_COMPLETE时,Webbrowser控件会通过触发DocumentCompleted事件来指示网页加载完毕.但当加载的网页包含frame时,可能会多次触发该事件,所以不能简单地通过它来判断网页加载完毕.从微软的官方网站上了解到,并非每个frame都对应了一个DocumentCompleted事件,只有触发了DownloadBegin事件的frame才会有相应的DocumentCompleted事件.另外,最外层的frame总是最

js判断图片加载完成

<!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body> <img id="mainPic" src="http://img1c.xgo-img

SDWebImage在UITableView部分CELL图片无法加载的解决办法

开始在cell中是使用这个函数来加载图片的. [self.photoView sd_setImageWithURL:[NSURL URLWithString: [post objectForKey: @"thumb_url"]] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {...} 非常简洁的API,好舒服.但是在tableview第一次加载数据的时候

UITableView将所有字体全部加载到UITableViewCell中

注意在头文件声明代理协议 #import "ViewController.h" @interface ViewController () { NSArray * _array; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self _loadData]; UITableView * tableView = [[UITableView alloc]initWithFra

Webbrowser判断页面加载完成

Webbrowser 请求加载页面,页面中包含各种资源,不能够很准确的判断加载是否完成,需要通过特定的方法判断. 1.使用计数器判断页面是否加载完成.精准可控. // 计数器 int counter = 0 ; // 添加事件响应函数 this .webBrowser.Navigated += new System.Windows.Forms.WebBrowserNavigatedEventHandler(webBrowser_Navigated); this .webBrowser.Docum

Webbrowser控件判断网页加载完毕的简单方法 (转)

摘自:http://blog.csdn.net/cometnet/article/details/5261192 一般情况下,当ReadyState属性变成READYSTATE_COMPLETE时,Webbrowser控件会通过触发DocumentCompleted事件来指示网页加载完毕.但当加载的网页包含frame时,可能会多次触发该事件,所以不能简单地通过它来判断网页加载完毕. 从微软的官方网站上了解到,并非每个frame都对应了一个DocumentCompleted事件,只有触发了Down

JS判断页面加载完毕

//JS判断页面加载完毕,再隐藏加载效果层,一个简单的JS加载效果. document.onreadystatechange = function () { if (document.readyState == "complete") { var page = DF.URLHash.get("page"); if (typeof (page) != "undefined" && page != "page1.html&q

【MFC】转:在CHtmlView中判断页面加载完成

原帖:http://blog.csdn.net/wangjia184/article/details/3684862 论坛上有人问如何在CHtmlView中判断页面加载完成.这里给出一点想法. 首先想想这个问题如果是在JS里面是如何实现的.JS里面最简单的方式就是利用onload事件让一段JS在页面加载完成后启动.使用onload事件的好处是,能够保证页面上的image图片都已经加载完成. 比如: window.onload = function() { // do something } //