//數組
// 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