自定義刷新tableView

//數組

//  LSTWholeTableController.m服務器

//  BUDEJIE網絡

//atom

//  Created by admin on 16/8/17.代理

//  Copyright © 2016年 ibokan. All rights reserved.code

//orm

 

#import "LSTWholeTableController.h"server

#import "AFNetworking.h"rem

#import "LSTWholeModal.h"get

#import "MJExtension.h"

#import "SVProgressHUD.h"

@interface LSTWholeTableController ()

@property(nonatomic,weak)UIView * footerView;

@property(nonatomic,weak)UIView * headerView;

@property(nonatomic,weak)UILabel * footerLabel;

@property(nonatomic,weak)UILabel * headerLabel;

/**加載下一頁數據**/

@property (nonatomic, copy) NSString *maxtime;

/**底部是否刷新**/

@property(nonatomic,assign,getter=isHeaderRefreshing)BOOL headerRefreshing;

/**Bool判斷是否刷新**/

@property(nonatomic,assign,getter=isRefreshing)BOOL footerRefreshing;

/**模型數組**/

@property(nonatomic,strong)NSMutableArray * wholeData_array;

/**請求數據**/

@property(nonatomic,strong)AFHTTPSessionManager * manager;

@end

 

@implementation LSTWholeTableController

/**加載View**/

- (void)viewDidLoad {

    [super viewDidLoad];

    self.tableView.backgroundColor=[UIColor greenColor];

 

    /**監聽通知**/

    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(tabBarButtonClick) name:TabBarButtonRepeatClickNotification object:nil];

    [self setupRefresh];

    [self loadData];

 

}

-(void)setupRefresh{

    

    UIView * footerView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 35)];

    UILabel * footerLabel=[[UILabel alloc]initWithFrame:footerView.bounds];

    footerLabel.text=@"上拉加載更多";

    footerLabel.textAlignment=NSTextAlignmentCenter;

    footerLabel.backgroundColor=[UIColor orangeColor];

    [footerView addSubview:footerLabel];

    self.footerView=footerView;

    self.footerLabel=footerLabel;

    self.tableView.tableFooterView=footerView;

    

    UILabel * label=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 0, 30)];

    label.backgroundColor=[UIColor blackColor];

    label.textColor=[UIColor whiteColor];

    label.text=@"廣告";

    label.textAlignment=NSTextAlignmentCenter;

    self.tableView.tableHeaderView=label;

   

    /**頭部**/

    UIView * header=[[UIView alloc]init];

    header.backgroundColor=[UIColor brownColor];

    header.frame=CGRectMake(0, -50, SCREEN_WIDTH, 50);

    self.headerView=header;

    [self.tableView addSubview:header];

    UILabel * headerLabel=[[UILabel alloc]init];

    headerLabel.frame=header.bounds;

    headerLabel.text=@"下拉能夠刷新";

    headerLabel.textColor=[UIColor whiteColor];

    headerLabel.textAlignment=NSTextAlignmentCenter;

    self.headerLabel=headerLabel;

    [header addSubview:headerLabel];

    // 讓header自動進入刷新

    [self headerBeginRefreshing];

}

- (void)headerBeginRefreshing

{

    // 若是正在下拉刷新,直接返回

    if (self.isHeaderRefreshing) return;

    

    // 進入下拉刷新狀態

    self.headerLabel.text = @"正在刷新數據...";

    self.headerLabel.backgroundColor = [UIColor blueColor];

    self.headerRefreshing = YES;

    // 增長內邊距

    [UIView animateWithDuration:0.25 animations:^{

        UIEdgeInsets inset = self.tableView.contentInset;

        inset.top += self.headerView.height;

        self.tableView.contentInset = inset;

        

        // 修改偏移量

        self.tableView.contentOffset = CGPointMake(self.tableView.contentOffset.x,  - inset.top);

    }];

    

    // 發送請求給服務器,下拉刷新數據

    [self loadData];

}

 

#pragma mark - 代理方法

/**

 *  用戶鬆開scrollView時調用

 */

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

{

    CGFloat offsetY = - (self.tableView.contentInset.top + self.headerView.height);

    if (self.tableView.contentOffset.y <= offsetY) { // header已經徹底出現

        [self headerBeginRefreshing];

    }

}

 

-(AFHTTPSessionManager *)manager{

    if (!_manager) {

        _manager=[AFHTTPSessionManager manager];

    }

    return _manager;

}

 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    // 處理header

    [self dealHeader];

    

    // 處理footer

    [self dealFooter];

}

/**

 *  處理footer

 */

- (void)dealFooter

{

    // 尚未任何內容的時候,不須要判斷

    if (self.tableView.contentSize.height == 0) return;

    

    // 當scrollView的偏移量y值 >= offsetY時,表明footer已經徹底出現

    CGFloat ofsetY = self.tableView.contentSize.height + self.tableView.contentInset.bottom - self.tableView.height;

    if (self.tableView.contentOffset.y >= ofsetY

        && self.tableView.contentOffset.y > - (self.tableView.contentInset.top)) { // footer徹底出現,而且是往上拖拽

        [self footerBeginRefreshing];

    }

}

 

- (void)dealHeader

{

    // 若是正在下拉刷新,直接返回

    if (self.isHeaderRefreshing) return;

    

    // 當scrollView的偏移量y值 <= offsetY時,表明header已經徹底出現

    CGFloat offsetY = - (self.tableView.contentInset.top + self.headerView.height);

    if (self.tableView.contentOffset.y <= offsetY) { // header已經徹底出現

        self.headerLabel.text = @"鬆開當即刷新";

        self.headerLabel.backgroundColor = [UIColor grayColor];

    } else {

        self.headerLabel.text = @"下拉能夠刷新";

        self.headerLabel.backgroundColor = [UIColor redColor];

    }

}

- (void)headerEndRefreshing

{

    self.headerRefreshing = NO;

    // 減少內邊距

    [UIView animateWithDuration:0.25 animations:^{

        UIEdgeInsets inset = self.tableView.contentInset;

        inset.top -= self.headerView.height;

        self.tableView.contentInset = inset;

    }];

}

-(void)tabBarButtonClick{

    if (self.view.window==nil) return;

    if (self.tableView.scrollsToTop==NO) return;

}

-(void)dealloc{

    [[NSNotificationCenter defaultCenter]removeObserver:self name:TabBarButtonRepeatClickNotification object:nil];

}

#pragma mark 加載數據

-(void)loadData{

    

    NSMutableDictionary * parameters=[NSMutableDictionary dictionary];

    parameters[@"a"]=@"list";

    parameters[@"c"]=@"data";

    parameters[@"type"]=@"1";

    [self.manager GET:BaseURL parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary *  _Nullable responseObject) {

        self.wholeData_array=[LSTWholeModal mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];

      

        [self.tableView reloadData];

        

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        [SVProgressHUD showErrorWithStatus:@"網絡異常,加載失敗"];

    }];

}

 

/**

 *  發送請求給服務器,上拉加載更多數據

 */

- (void)loadMoreTopics

{

    // 1.取消以前的請求

    [self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];

    

    // 2.拼接參數

    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];

    parameters[@"a"] = @"list";

    parameters[@"c"] = @"data";

    parameters[@"type"] = @"31";

    parameters[@"maxtime"] = self.maxtime;

    

    // 3.發送請求

    [self.manager GET:BaseURL parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {

        // 存儲maxtime

        self.maxtime = responseObject[@"info"][@"maxtime"];

        

        // 字典數組 -> 模型數據

        NSArray *moreTopics = [LSTWholeModal mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];

        // 累加到舊數組的後面

        [self.wholeData_array addObjectsFromArray:moreTopics];

        

        // 刷新表格

        [self.tableView reloadData];

        

        // 結束刷新

        [self footerEndRefreshing];

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        if (error.code != NSURLErrorCancelled) { // 並不是是取消任務致使的error,其餘網絡問題致使的error

            [SVProgressHUD showErrorWithStatus:@"網絡繁忙,請稍後再試!"];

        }

        

        // 結束刷新

        [self footerEndRefreshing];

    }];

}

- (void)footerEndRefreshing

{

    self.footerRefreshing = NO;

    self.footerLabel.text = @"上拉能夠加載更多";

    self.footerLabel.backgroundColor = [UIColor redColor];

}

#pragma mark - footer

- (void)footerBeginRefreshing

{

    // 若是正在上拉刷新,直接返回

    if (self.footerRefreshing) return;

    

    // 進入刷新狀態

    self.footerRefreshing = YES;

    self.footerLabel.text = @"正在加載更多數據...";

    self.footerLabel.backgroundColor = [UIColor blueColor];

    

    // 發送請求給服務器,上拉加載更多數據

    [self loadMoreTopics];

}

 

#pragma mark - Table view data source

 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

 

    return self.wholeData_array.count;

}

 

 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString * const ID=@"cell";

    UITableViewCell * cell=[tableView dequeueReusableCellWithIdentifier:ID];

    if (!cell) {

        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];

    }

    LSTWholeModal * wholeDateModal=self.wholeData_array[indexPath.row];

    cell.textLabel.text=wholeDateModal.name;

    cell.detailTextLabel.text=wholeDateModal.text;

 

    return cell;

}

 

 

 

 

 

 

@end

相關文章
相關標籤/搜索