-
题记
因为最近被SVPullToRefresh的简洁所吸引,所以开始用了。
关于SVPullToRefresh的原理,中文资料也非常多了,本文便不多说了。
本文仅仅是提出SVPullToRefresh上拉加载更多过程中数据加载完毕,或者说是没有更多数据下的一种解决方案。(当然是因为SVPullToRefresh没有自带这个状态)
-
先看下实现的效果吧
-
完整代码
-
简单思路
- 1.上拉加载完毕发现没有数据时,咱们就改变infiniteScrollingView的CustomView,添加一个‘没有更多了'的UILabel来占位,同时关闭上拉加载,以避免下方无用视图占位的尴尬,和没必要的上拉
- 2.下拉加载时重新打开下拉刷新
-
具体代码实现
// 上拉加载更多
[self.scrollView addInfiniteScrollingWithActionHandler:^{
// 模拟刷新
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 如果已经加载完毕
[self addNoMoreData];
// 正常情况
// Do any additional setup after refreshing
// ...
[self.scrollView.infiniteScrollingView stopAnimating];
});
}];
- (void)addNoMoreData {
UILabel *label = [[UILabel alloc] init];
label.frame = CGRectMake(0, 0, 375, 60);
label.backgroundColor = [UIColor greenColor];
label.text = @"没有更多了";
label.textAlignment = NSTextAlignmentCenter;
[self.scrollView.infiniteScrollingView setCustomView:label forState:SVInfiniteScrollingStateStopped];
self.scrollView.infiniteScrollingView.enabled = NO;
}
- (void)pullDownAction:(UIRefreshControl *)control {
// 模拟下拉
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 重置上拉
self.scrollView.infiniteScrollingView.enabled = YES;
[control endRefreshing];
});
}