UITableView與MJRefresh

在實(shí)際項(xiàng)目中,很多控制器都是UITableview組成的,并且很多時(shí)候我們都要為其增加上下拉刷新的功能,之前寫項(xiàng)目都是在每個(gè)控制器中去添加MJRefresh的代碼,現(xiàn)在看起來真的是傻傻地。效果如下圖 具體實(shí)現(xiàn)代碼 demo

photo.gif

話不多少上代碼 不知道咋說馬的

首先,創(chuàng)建一個(gè)基類 ViewCtr 聲明tableView 以及數(shù)據(jù)源 自定義初始化方法,設(shè)置代理。

@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;
//設(shè)置上下拉刷新(可在此方法類設(shè)置 上下拉樣式)
-(void)offerRefresh:(BOOL)refresh andLoadMore:(BOOL)loadMore;
//展示錯(cuò)誤信息頁面
-(void)showPageError:(BOOL)show withIsError:(BOOL)error;
//請(qǐng)求數(shù)據(jù) 
-(void)loadData;
//重新獲取數(shù)據(jù)
-(void)resetGetData;

.m文件
初始化UITableView 設(shè)置frame style 以及是否提供上下拉刷新功能(如果不需要上拉加載,可更具需要自己調(diào)整代碼)

-(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];
}

數(shù)據(jù)請(qǐng)求

-(void)loadData{
    NSLog(@"調(diào)用父類");
  //在子類控制器中 直接重寫該方法獲取網(wǎng)絡(luò)數(shù)據(jù)
}

設(shè)置添加上下拉刷新

-(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;
    } 
}

添加上下拉刷新數(shù)據(jù)代碼

-(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> //根據(jù)頁面需求,重寫代理方法即可

在實(shí)際項(xiàng)目中,會(huì)出現(xiàn)網(wǎng)絡(luò)請(qǐng)求失敗或者數(shù)據(jù)列表中還沒有數(shù)據(jù)需要給用戶展示提示界面,為此增加了ErrorView的簡單封裝。

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

這個(gè)比較簡單就不說了。

主要是通過block重新回到基類重新請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù)刷新頁面,
無數(shù)據(jù)時(shí)隱藏按鈕即可

在使用中,創(chuàng)建控制器繼承自基類

- (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];   
}
//重寫父類方法-獲取數(shù)據(jù)源
-(void)loadData{
    [super loadData];
  //根據(jù)需求獲取不同的數(shù)據(jù)源
    for (NSInteger i = 0; i<10; i++) {
        [self.data addObject:@"123"];
    }
    [self.wTableView reloadData];
   //  加載數(shù)據(jù)失敗或者無數(shù)據(jù)時(shí)調(diào)用  error = YES? 訪問出錯(cuò):暫無數(shù)據(jù);
   //  [self showPageError:YES withIsError:YES];
}

//點(diǎn)擊重新加載調(diào)用此方法
-(void)resetGetData{
     [self.wTableView.mj_header beginRefreshing];    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,180評(píng)論 4 61
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,837評(píng)論 18 139
  • 1產(chǎn)品閃付# 1.1點(diǎn)擊支付,插入了一條閃付訂單## 1.2點(diǎn)擊去支付 ,請(qǐng)求支付接口##
    EddieZhang閱讀 185評(píng)論 0 0
  • 如果給你一臺(tái)哆啦A夢(mèng)的時(shí)光機(jī)。你愿意回到過去嗎?最想回到那個(gè)時(shí)候? 人們總是在念舊,越長大就越想念過去的歲月。可是...
    梅子梅子閱讀 1,352評(píng)論 0 4
  • 度過了碌碌無為的一個(gè)周末,看了好幾集電視劇,總想著放松。 可是你要知道呀,放松怎么優(yōu)秀的。要足夠優(yōu)秀才能有好的前途...
    凱西梨閱讀 120評(píng)論 0 0