iOS--UITableView上下拉刷新加载更多
来源:互联网 发布:雨刮器在淘宝买好吗 编辑:程序博客网 时间:2024/06/10 00:28
UITableView的上下拉刷新加载更多的功能是非常常用的,网上有一个很出名的开源项目--EGOTableViewPullRefresh,这个项目只有下拉刷新头,而没有上拉加载的尾部。所以自己就在此基础上改了一下,添加了一个上拉加载的尾部。
本文的Demo在 https://github.com/gaussli/PullUpDownRefreshTableViewDemo
下面来说一下大致思想和说明:
1. 先对两个主要的类进行说明:
1)JHPullRefreshHeaderView:下拉刷新头
按照上面上述EGOTableViewPullRefresh项目中的思想,我也分了三个状态,普通状态JHPullRefreshHeaderNormal;下拉过程状态JHPullRefreshHeaderPulling,正在加载状态JHPullRefreshHeaderLoading。
下拉刷新代理JHPullRefreshHeaderDelegate,用于在下拉刷新头进入正在加载状态时外部实现数据加载操作。
- (void) firstAutoLoadingWithScrollView: (UIScrollView*)scrollView;--首次自动刷新逻辑
- (void) refreshScrollViewDidScroll:(UIScrollView *)scrollView;--滚动过程逻辑
- (void) refreshScrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;--松开触碰逻辑
- (void) refreshScrollViewDataSourceDidFinishedLoading:(UIScrollView *)scrollView;--加载数据成功逻辑
2)JHPullRefreshFooterView:上拉加载尾
其实这个就和下拉刷新头的思想一样了。
2. 使用步骤:
1)在ViewController中声明一个普通的UITableView对象,并进行必要的初始化操作:
声明:
@property (nonatomic, strong) UITableView *tableview; // TableView @property (nonatomic, strong) JHPullRefreshHeaderView *pullRefreshHeaderView; // 下拉刷新头 @property (nonatomic, strong) JHPullRefreshFooterView *pullRefreshFooterView; // 上拉加载尾
初始化:
self.tableview = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, JH_DEVICE_WIDTH, JH_DEVICE_HEIGHT-JH_STATUSBAR_HEIGHT)]; self.tableview.dataSource = self; self.tableview.delegate = self; // 去除多余的横线 self.tableview.tableFooterView = [[UIView alloc] init]; [self.view addSubview:self.tableview];2)实现必要的代理:
系统代理:UITableViewDataSource, UITableViewDelegate(在使用上拉刷新下拉加载时需要使用到UIScrollViewDelegate代理,这里不用实现的原因是UITableViewDelegate里已经包含了)
自定义代理(就是下拉刷新和上拉加载的代理):JHPullRefreshHeaderDelegate, JHPullRefreshFooterDelegate
3)添加下拉刷新头:
声明:
@property (nonatomic, strong) JHPullRefreshHeaderView *pullRefreshHeaderView; // 下拉刷新头初始化:
// 设置下拉刷新头 self.pullRefreshHeaderView = [[JHPullRefreshHeaderView alloc] initWithFrame:CGRectMake(0, -40, self.tableview.frame.size.width, 40)]; self.pullRefreshHeaderView.delegate = self; [self.tableview addSubview:self.pullRefreshHeaderView];
4)设置下拉刷新头的操作
a)实现UIScrollViewDelegate中的- (void) scrollViewDidScroll:(UIScrollView *)scrollView,添加代码:
[self.pullRefreshHeaderView refreshScrollViewDidScroll:scrollView];b)实现UIScrollViewDelegate中的- (void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate,添加代码:
[self.pullRefreshHeaderView refreshScrollViewDidEndDragging:scrollView willDecelerate:decelerate];c)实现JHPullRefreshHeaderView代理的函数(第二个函数是Demo使用的,实际情况应该是数据加载逻辑):
#pragma mark 下拉刷新代理 - (void) pullRefreshHeaderWithScrollView:(UIScrollView *)scrollView { [self performSelector:@selector(refreshScrollHeaderViewDataSourceDidFinishedLoading) withObject:nil afterDelay:1.5]; } #pragma mark 下拉刷新数据获取成功 - (void) refreshScrollHeaderViewDataSourceDidFinishedLoading { [self.pullRefreshHeaderView refreshScrollViewDataSourceDidFinishedLoading:self.tableview]; }5)添加上拉加载头
声明:
@property (nonatomic, strong) JHPullRefreshFooterView *pullRefreshFooterView; // 上拉加载尾
初始化,尾部的初始化和头部不一样,头部只要放在tableView之上就可以了,但是尾部要放到最后面,就要知道tableView的contentSize是多少,于是我是在这个tableView初始化后在添加尾部的,而且如果tableView中的数据没有占满tableView的空间,就说明它的数据还不是太多,就没有必要把上拉加载添加进去了。所以这里有一个判断,判断tableView的contentSize.y是否大于frame.size.height,如果大于,则添加尾部,否则不添加:
if (self.tableview.contentSize.height >= self.tableview.frame.size.height) { // 设置上拉加载尾 self.pullRefreshFooterView = [[JHPullRefreshFooterView alloc] initWithFrame:CGRectMake(0, self.tableview.contentSize.height, self.tableview.frame.size.width, 40)]; self.pullRefreshFooterView.delegate = self; [self.tableview addSubview:self.pullRefreshFooterView]; }6)设置上拉加载尾的操作,这个操作就和下拉刷新操作基本类似了,在实际中应该就只是数据加载的操作不一样而已了,这里就不多写。
至此,一个比较简单的下拉刷新上拉加载的功能就完成了,以此记录,慢慢进步。
- iOS--UITableView上下拉刷新加载更多
- IOS-给UIScrollView(包括继承它的UITableView、UICollectionView)添加下拉刷新-上拉加载更多
- 【iOS】UITableView的上拉加载更多和下拉刷新原理
- UIScrollerView和UITableView下拉刷新,上拉加载更多
- UITableView:下拉刷新和上拉加载更多
- ios之下拉刷新上拉加载更多
- XRecyclerView上下拉加载刷新
- iOS 下拉刷新和上拉加载更多
- iOS下拉刷新上拉加载更多EGOTableViewPullRefresh类库
- iOS下拉刷新上拉加载更多EGOTableViewPullRefresh类库
- iOS开发之上拉刷新(加载更多)(EGORefreshTableFooterView)
- iOS下拉刷新上拉加载更多EGOTableViewPullRefresh类库
- listView 模仿ios的上拉刷新下拉加载更多
- iOS下拉刷新上拉加载更多EGOTableViewPullRefresh类库
- iOS下拉刷新上拉加载更多EGOTableViewPullRefresh类库
- iOS 下拉刷新和上拉加载更多
- iOS轮子: 下拉刷新,上拉加载更多
- iOS开发 下拉刷新上拉加载更多详解
- 刻通云KeyTone Cloud测试
- 全面总结Java泛型
- python抓取天气
- 没有期望,谈何努力,不过是在自欺欺人罢了。
- swing JPanel设置背景图 拉伸、平铺、居中
- iOS--UITableView上下拉刷新加载更多
- 判断NSString是否等于<null>
- 【MVC框架整合】之 二:SpringMVC3.2.0+MyBatis3.1.1+Spring3.2.0+atomikos 多个事务管理
- NPOI插图到docx页眉
- 利用Aspose.Word控件实现Word文档的操作
- SpringMVC json问题 406 Not Acceptable
- ListView 跳转到Activity
- 给UIView添加背景图片
- ios应用间通信和分享数据的机制