实现TableView的上拉加载和下拉刷新

本文介绍了如何在项目开发中手动实现TableView的下拉刷新和上拉加载功能。对于下拉刷新,通过封装系统refreshControl并监听UIControlEventValueChanged事件解决了开始刷新不触发问题。上拉加载则通过分析contentOffset、屏幕高度和contentSize的关系,判断用户是否已到达底部并触发加载更多数据的方法。完整代码和Demo已在GitHub分享。
摘要由CSDN通过智能技术生成

项目开发过程中经常会用到tableview来加载网络数据,而经常要用到的一个功能就是下拉刷新,上拉加载更多。虽然有很多第三方框架可以使用,但是有时我们还是想自己手动定制来达到目的。

下面我们来具体看看如何实现


下拉刷新

这个功能我们可以使用系统自带的refreshControl,但是这个控件只能用在tableViewController里面。

具体实现看代码:

viewController.m 文件
==========================
@interface ViewController ()<UITableViewDelegate, UITableViewDataSource>
@property (strong ,nonatomic)NSMutableArray *modelArray;
@end

@implementation ViewController

static NSString *const CellId = @"cell";

- (NSMutableArray *)modelArray{
    if (!_modelArray) {
        _modelArray = [NSMutableArray array];
    }
    return _modelArray;
}


- (void)viewDidLoad{
    [super viewDidLoad];
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;

    UIRefreshControl *refresh = [[UIRefreshControl alloc]init];
    refresh.attributedTitle = [[NSAttributedString alloc]initWithString:@"下拉刷新"];
    [refresh addTarget:self action:@selector(refresh) forControlEvents:UIControlEventValueChanged];
    self.refreshControl = refresh;

   [self.refreshControl beginRefreshing];
}


- (void)refresh{
    if (self.refreshControl.isRefreshing){
        [self.modelArray removeAllObjects];//清除旧数据,每次都加载最新的数据
        self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"加载中..."];
        [self addData];
        self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"下拉刷新"];
        [self.tableView reloadData];
        [self.refreshControl endRefreshing];

    }
}

//加载数据
- (void)addData{
    NSDate *date = [[NSDate alloc]init];
    for (int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值