EGORefreshTableHeaderView下拉刷新(二)——启动APP触发下拉刷新

前一篇完成了点击按钮实现下拉刷新效果,但是还不够。


问题背景:

初次启动APP时,怎么完成下拉刷新呢?


要实现这个功能,真是走了不少弯路。


解决思路:

1、在viewDidLoad里面直接调用refreshTodoList函数

[self refreshTodoList:nil];

这个所最简单容易想到的方法,发现函数虽然调用到了,但是没有下拉效果。


2、模拟点击按钮的功能,来进行自动触发

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btn.frame = CGRectMake(0, 0, 20, 20);
    [btn addTarget:self action:@selector(refreshTodoList:) forControlEvents:UIControlEventTouchUpInside];
    [btn sendActionsForControlEvents:UIControlEventTouchUpInside];


发现这个的结果和前面的效果一样,问题还是没有解决。


3、在viewWillAppear里面调用refreshTodoList。

-(void)viewWillAppear:(BOOL)animated
{
    self.navigationController.navigationBar.tintColor = NAV_BAR_COLOR;
    [self refreshTodoList:self];
}


发现这个奏效了,但是第一次进入页面没有出现效果,后面切回到这个页面才会有效果。

于是发现了问题,第一种方法不生效的原因,应该是viewDidLoad后,不能立刻显示后面触发的效果,需要在主进程进行延迟操作,于是修改下代码。也就是第4种。


4、在viewDidLoad里面异步调用refreshTodoList函数

[self performSelector:@selector(refreshTodoList:) withObject:nil afterDelay:0.4];

因为第一种方式中,直接调用实际上所同步执行,跟线程无关,而performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay:<#(NSTimeInterval)#>的方式实际上是异步调用。所以可行。


这个问题可以做实验验证下:

[self performSelector:@selector(refreshTodoList:) withObject:nil afterDelay:0.4]; //异步调用,OK

[self performSelector:@selector(refreshTodoList:) withObject:nil];  //同步调用,不OK

至此,问题解决。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值