码迷,mamicode.com
首页 > 其他好文 > 详细

自定义刷新tableView

时间:2016-08-19 12:59:08      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

//

//  LSTWholeTableController.m

//  BUDEJIE

//

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

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

//

 

#import "LSTWholeTableController.h"

#import "AFNetworking.h"

#import "LSTWholeModal.h"

#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

 

自定义刷新tableView

标签:

原文地址:http://www.cnblogs.com/520lqlst/p/5786914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!