第三方 MJRefresh 实现 iOS中 上拉加载更多,下拉刷新数据

现在主流的 APP 中都会有刷新功能, 有下拉刷新数据,有上划加载更多.现在很多优秀的第三方能帮我们轻松实现类似功能, 今天我就借用大牛李明杰老师的第三方 MJRefresh来实现简单的刷新功能.

1, 下载第三方MJRefresh解压,将名为MJRefresh的文件夹拖到自己的工程中.

2,我们在 storyboard 中创建一个 UITableViewController 关联一个实体类,作为一个导航控制器的根视图控制器,使界面能够展示出来.

3,导入头文件,添加数据源属性

<pre name="code" class="objc"><span style="font-size:14px;">#import "MJRefreshViewController.h"
#import "MJRefresh.h"

@interface MJRefreshViewController ()

@property (nonatomic, strong) NSMutableArray *dataSource;

@end</span>

 
4,懒加载,给数据源开辟空间,赋初值(假数据)
<span style="font-size:14px;">//懒加载,给数据源赋初值
- (NSMutableArray *)dataSource {
    if (!_dataSource) {
        self.dataSource = [NSMutableArray arrayWithCapacity:1];
        for (int i = 0; i < 5; i++) {
            NSString *string = [NSString stringWithFormat:@"山本%d", arc4random_uniform(1000)];
            [self.dataSource addObject:string];
        }
    }
    return _dataSource;
}
</span>
5,设置行数,因为只有一个分组笔者就把设置分组的方法删掉了

<span style="font-size:14px;">- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return self.dataSource.count;
}
</span>
6, 让 cell 显示数据
<span style="font-size:14px;">- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellReuse" forIndexPath:indexPath];
    
    //cell 显示数据
    cell.textLabel.text = self.dataSource[indexPath.row];
    return cell;
}
</span>
7, 在 viewDidLoad 方法中实现下拉刷新,上划加载

<span style="font-size:14px;">- (void)viewDidLoad {
    [super viewDidLoad];
    //下拉刷新
    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        [self loadNewData];
    }];
    //上拉加载
    self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
    //在刷新数据覆盖不显示数据的 cell 的分割线,如果不设置,则会显示 cell 的分割线
    UIView *footView = [UIView new];
    self.tableView.tableFooterView = footView;
}
</span>
8, 实现 loadNewData 和loadMoreData

<span style="font-size:14px;">- (void)loadNewData {
    //1,获取数据
    for (int i = 0; i < 5; i++) {
        NSString *string = [NSString stringWithFormat:@"____山本%d", arc4random_uniform(1000)];
        [self.dataSource insertObject:string atIndex:0];
    }
    //2,刷新数据
    [self.tableView reloadData];
    //3,关闭刷新
    [self.tableView.mj_header endRefreshing];
}</span>
<span style="font-size:14px;">- (void)loadMoreData {
    //1, 获取数据源
    for (int i = 0; i < 5; i++) {
        NSString *string = [NSString stringWithFormat:@"+++山本%d", arc4random_uniform(1000)];
        [self.dataSource addObject:string];
    }
    //2,刷新数据
    [self.tableView reloadData];
    //3,关闭刷新
    [self.tableView.mj_footer endRefreshing];
    
}</span>
此时运行程序就可以实现刷新数据功能了,不过笔者这里添加的都是假数据,在实际开发中,读者可以在loadNewData 和loadMoreData 两个方法中,将从网络请求的数据添加到数据源,再进行刷新就能展示请求的数据了.























评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值