iOS UITableView reloadData 刷新结束后执行后续操作

如果在reloadData后需要立即获取tableview的cell、高度,或者需要滚动tableview。

如果直接在reloadData后执行代码是有可能出问题的,比如indexPath为nil等等异常情况。

[tableView reloadData]并不会等待tableview更新结束后才执行后续代码,

而是立即执行后续代码,然后异步地去计算scrollView的高度,获取cell等等。

如果表中的数据非常大,在一个run loop周期没执行完,

这时就显示tableView视图数据的操作就会出问题了。

Apple并没有直接提供reloadData的api,想要程序延迟到reloadData结束在操作。

可以通过以下方法:

1. 通过layoutIfNeeded方法,强制重绘并等待完成。

[self.tableView reloadData];
[self.tableView layoutIfNeeded];
//刷新完成,执行后续需要执行的代码

2.reloadData方法会在主线程执行,通过GCD,使后续操作排队在reloadData后面执行。

[self.tableView reloadData];
dispatch_async(dispatch_get_main_queue(), ^{
    //刷新完成,执行后续代码
});

参考链接:http://blog.csdn.net/cuibo1123/article/details/48558213

感谢原作者!



转载请注明出处:http://ficow.cn

时间: 2024-08-25 13:13:10

iOS UITableView reloadData 刷新结束后执行后续操作的相关文章

jquery动画函数里面可以跟一个回调函数,表示动画结束后执行的代码

使用js监听动画结束后进行的操作: $ele.fadeIn(300,function(){...}) $ele.fadeOut(300,function(){...}) $ele.slideUpDown(300,function(){...}) $ele.fadeSlideUpDown(300,function(){...}) 原文地址:https://www.cnblogs.com/Knowledge-is-infinite/p/11380628.html

让自定义函数在ajax结束后执行

在JQ中提供了两个用来确定ajax是否结束的函数:ajaxStop().ajaxSuccess(). ajaxStop(),当所有AJAX结束的的时候,触发: $(document).ajaxStop(function(){ alert("所有AJAX请求完成."); }); ajaxSuccess(),无论ajax什么时候完成,JQuery都会处罚ajaxSuccess事件.在此时候,.ajaxSuccess()方法注册在任何函数都会执行. $(document).ajaxSucce

IOS UITableView reload 刷新某一个cell 或 section

通常刷新整个列表 我们都使用[self.tableView reloadData]; 有的时候,有变化更新的只是某一行 row 或者是某个section 所以只更新这一行就好了 //一个section刷新 int section_index=10;//更新第11个sectioin [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:section_index] withRowAnimation:UITableViewRowAn

js关闭或者刷新页面后执行事件

onbeforeunload 使用方法 window.onbeforeunload=function(){ return ''; } 有返回值才能弹出显示,或者有需要执行的事件也行. 原文地址:https://www.cnblogs.com/jpfss/p/8444907.html

NG循环结束后执行函数:(用于瀑布流,下拉框,及相关需要插座dom插件之类的场景)

先定义指令: app.directive('onFinishRender',function ($timeout) { return { restrict: 'A', link: function (scope, element, attr) { if (scope.$last === true) { $timeout(function () { scope.$emit('ngRepeatFinished'); // scope.isSelectShow = false; }); } } } }

动画结束后执行

$('#animationSandbox').removeClass().addClass(x + ' animated').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){ $(this).removeClass(); }); 原文地址:https://www.cnblogs.com/chenjacky/p/10258443.html

iOS:下拉刷新控件UIRefreshControl的详解

下拉刷新控件:UIRefreshControl 1.具体类信息: @interface UIRefreshControl : UIControl //继承控制类 - (instancetype)init; @property (nonatomic, readonly, getter=isRefreshing) BOOL refreshing; //是否可以刷新 @property (nonatomic, retain) UIColor *tintColor; //控件颜色 @property (

IOS之UITableView——如何刷新父页面的Cell

问题:评论数同步 在社交相关的项目中经常有这样的主页面,主列表的Cell中有赞数,评论数,详情页顶部也是同样的一个Cell,下部有评论列表,评论增加或减少,详情页的评论数随之改变,返回主列表,主列表的对应的Cell中评论数却没改变.怎么同步呢. 解决方案:详情页的Cell刷新时,发送通知,主列表监听通知,通知的回调方法只要执行tableview reloaddata即可 IOS之UITableView--如何刷新父页面的Cell

C# 多线程join的用法,等待多个子线程结束后再执行主线程

等待多个子线程结束后再执行主线程 class MultiThread{ #region join test public void MultiThreadTest() { Thread[] ths = new Thread[2]; ths[0] = new Thread(Method1); ths[1] = new Thread(Method2); foreach (Thread item in ths) { //首先让所有线程都启动 item.Start(); //试想一下在这里加上item.