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;

    }

}

 

你可能感兴趣的:(下拉刷新)