iOS学习之项目流程分析(二)

今天我们来给昨天的Demo加上下拉刷新和上拉加载更多的功能.

1.下拉刷新.

在viewDidLoad中调用方法addRefreshControl,下拉时可以出现风火轮加载更多的效果.

- (void)addRefreshControl {
    self.refreshControl = [[[UIRefreshControl alloc] initWithFrame:CGRectZero] autorelease]; //frame不用给,系统默认有.
    self.refreshControl.attributedTitle = [[[NSAttributedString alloc] initWithString:@"下拉刷新数据"] autorelease];
    //添加响应事件
    [self.refreshControl addTarget:self action:@selector(handleReload:) forControlEvents:UIControlEventValueChanged];
    
}

响应事件的要根据实际情况,这里写成一个方法,当下拉时,重新向服务器请求(第一页)数据.

- (void)handleReload:(UIRefreshControl *)refresh {
    //请求最新数据,第一页数据.
    [self loadDataWithIndex:0];
}

这里的loadWithIndex方法也是为了能够总是请求第一页数据,也就是index为0("http://c.m.163.com/nc/article/list/T1348648517839/%ld-50.html",index);

//将请求的服务器地址单独写成一个方法,便于在下拉刷新和上拉加载时候调用.
//第一页:0 - 20; 第二页:20 - 20; 第三页:30 - 20....
- (void)loadDataWithIndex:(NSInteger)index {
    _index = index;
    //设置请求网址
    self.engine.linkName = [NSString stringWithFormat:kNewsAPI, index];//0 - 20条数据
    //开始网络请求
    [self.engine startDownloadData];
}

下拉刷新完毕.

下面是上拉加载更多.

那么什么时候应该加载呢?---当"上拉加载"这个Cell出现时候,说明视图已经滚动到了最后面.这时候我们可以调用UITableViewDelegate协议中的一个方法来让数据加载;

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    //如果要展示的Cell是最后一行,请求下一页数据
    if (indexPath.row == self.dataSource.count) {
        LoadingCell *cell1 = (LoadingCell *)cell; //将Cell转换一下类型,如果不做这一步,tableView并不知道这最后一个Cell是哪一套Cell
        [cell1.indicatorView startAnimating];
        //加载更多数据,下一页数据
        [self loadDataWithIndex:self.dataSource.count];//第一页0-20,self.data.count=20,第二页20-20,count=40,第三页40-20,count=60;
    }
}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。