UITableView与MJRefresh

作者: Wy_chris | 来源:发表于2016-12-23 16:12 被阅读140次

在实际项目中,很多控制器都是UITableview组成的,并且很多时候我们都要为其增加上下拉刷新的功能,之前写项目都是在每个控制器中去添加MJRefresh的代码,现在看起来真的是傻傻地。效果如下图 具体实现代码 demo

photo.gif

话不多少上代码 不知道咋说马的

首先,创建一个基类 ViewCtr 声明tableView 以及数据源 自定义初始化方法,设置代理。

@interface WYBaseViewCtr : UIViewController<UITableViewDelegate,UITableViewDataSource>
@property(nonatomic,strong)UITableView *wTableView;
@property(nonatomic,strong)NSMutableArray *data;
@property(nonatomic,assign)NSInteger page;

//初始化UITableView
-(void)initTableViewFrame:(CGRect)frame WithStyle:(UITableViewStyle)style;
//设置上下拉刷新(可在此方法类设置 上下拉样式)
-(void)offerRefresh:(BOOL)refresh andLoadMore:(BOOL)loadMore;
//展示错误信息页面
-(void)showPageError:(BOOL)show withIsError:(BOOL)error;
//请求数据 
-(void)loadData;
//重新获取数据
-(void)resetGetData;

.m文件
初始化UITableView 设置frame style 以及是否提供上下拉刷新功能(如果不需要上拉加载,可更具需要自己调整代码)

-(void)initTableViewFrame:(CGRect)frame WithStyle:(UITableViewStyle)style{
    self.wTableView = [[UITableView alloc] initWithFrame:frame style:style];
    _wTableView.delegate = self;
    _wTableView.dataSource = self;
 
    self.data = [NSMutableArray array];
    [self.view addSubview:_wTableView];
}

数据请求

-(void)loadData{
    NSLog(@"调用父类");
  //在子类控制器中 直接重写该方法获取网络数据
}

设置添加上下拉刷新

-(void)offerRefresh:(BOOL)refresh andLoadMore:(BOOL)loadMore{
    if (refresh) {
        _wTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(refresh)];
    }
    if (loadMore) {
        _wTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
        _wTableView.mj_footer.automaticallyHidden = YES;
    } 
}

添加上下拉刷新数据代码

-(void)refresh{
    self.page = 1;
    [self.data removeAllObjects];
    [self loadData];
    [self.wTableView.mj_header endRefreshing];
    [self.wTableView.mj_footer endRefreshing];
}

-(void)loadMoreData{
    self.page++;
    [self loadData];
    [self.wTableView.mj_header endRefreshing];
    [self.wTableView.mj_footer endRefreshing];
}
<UITableViewDelegate,UITableViewDataSource> //根据页面需求,重写代理方法即可

在实际项目中,会出现网络请求失败或者数据列表中还没有数据需要给用户展示提示界面,为此增加了ErrorView的简单封装。

Simulator Screen Shot 2016年12月23日 下午3.36.13.png

这个比较简单就不说了。

主要是通过block重新回到基类重新请求网络数据刷新页面,
无数据时隐藏按钮即可

在使用中,创建控制器继承自基类

- (void)viewDidLoad {
    
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.navigationItem.title = @"上下拉刷新";
    [self initTableViewFrame:CGRectMake(0, 64, SCREEN_WIDTH, SCREEN_HEIGHT-64) WithStyle:UITableViewStyleGrouped];
     [self offerRefresh:NO andLoadMore:YES];

    [self.wTableView.mj_header beginRefreshing];   
}
//重写父类方法-获取数据源
-(void)loadData{
    [super loadData];
  //根据需求获取不同的数据源
    for (NSInteger i = 0; i<10; i++) {
        [self.data addObject:@"123"];
    }
    [self.wTableView reloadData];
   //  加载数据失败或者无数据时调用  error = YES? 访问出错:暂无数据;
   //  [self showPageError:YES withIsError:YES];
}

//点击重新加载调用此方法
-(void)resetGetData{
     [self.wTableView.mj_header beginRefreshing];    
}

相关文章

  • UITableView与MJRefresh

    在实际项目中,很多控制器都是UITableview组成的,并且很多时候我们都要为其增加上下拉刷新的功能,之前写项目...

  • MJRefresh

    MJRefresh支持的控件:UITableView,UICollectionView,UIScrollView,...

  • ios 11适配相关

    1.UITableview UICollectionView MJRefresh下拉刷新错乱 automatic ...

  • iOS MJRefresh 使用方式

    MJRefresh组织架构 1.导入MJRefresh到项目中 2.UITableView下拉刷新和上拉刷新 2....

  • 尝试写表格刷新控件

    没看MJRefresh源码前,自己尝试书写了UIScrollView(UITableView, UICollect...

  • 三方库大全

    上拉,下拉 MJRefresh:为UITableView或者CollectionView,添加上拉、下拉处理!ht...

  • MJRefresh头部和尾部的用法

    尾部 头部 MJRefresh的实现原理利用分类在UITableView或UICollectionView上添加M...

  • iOS 原生嵌套H5,混合开发

    原理: 用UITableView做父视图(加入MJRefresh刷新,pods导入),原生的view当做table...

  • 刷新控件-MJRefresh

    一、简介 MJRefresh是一款强大可定制的刷新控件,支持UIScrollView、UITableView、UI...

  • 给UITableView添加MJRefresh

    1、给表添加头视图 2、初次加载数据的方法 3、加载更多数据的方法

网友评论

    本文标题:UITableView与MJRefresh

    本文链接:https://www.haomeiwen.com/subject/zuukvttx.html