#import "ViewController.h"
#import "UITableView+PullRefresh.h"
@interface ViewController ()<UITableViewDataSource, UITableViewDelegate>
@property (strong, nonatomic)NSMutableArray *arrData;
@property (strong, nonatomic)NSMutableArray *arrTmp;
@property (strong, nonatomic)UITableView *tabv;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// 初始化临时动态集合
self.arrTmp = [NSMutableArray array];
// 获取数据源
self.arrData = [NSMutableArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"2.只包含地级市" ofType:@"plist"]];
// 创建表视图
self.tabv = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStylePlain];
// 指定代理
self.tabv.dataSource = self;
self.tabv.delegate = self;
// 注册唯一标识
[self.tabv registerClass:[UITableViewCell class] forCellReuseIdentifier:@"reuse"];
// 添加到主视图
[self.view addSubview:self.tabv];
// 启动
[self.tabv setup];
// 加载
[self.tabv setLoadMoreEnable:YES];
// 避免强引用循环
__weak typeof(self)weakSelf = self;
// 回调
[self.tabv setLoadingBlock:^(BOOL pullDown)
{
[weakSelf sendMessage:!pullDown];
}];
}
- (void)sendMessage:(BOOL)isloadMore
{
if (!isloadMore)
{
[self.arrTmp removeAllObjects];
}
// 变量的声明只会走一次,因此即使是在函数或者block中声明的静态变量赋初值也只会走一次,所以多次调用如果是static每次调用是不会被清空的会被保存下来
// NSInteger num = 0; // 因为indexPath所以都一样,初值赋值多少都一样(但需要赋值为0,否则会提前崩),静态和普通变量都一样:从集合数据源下标的row=0开始
static NSInteger num = 0;
// 控制结束和每次刷新的数量
static NSInteger range = 200;
// 每次刷新都是把数据源的数据添加到临时的动态集合
for (NSInteger i = num; i < num+range; i++)
{
[self.arrTmp addObject:self.arrData[i]];
}
// 判断集合数量避免下标越界程序崩溃
if (self.arrData.count-self.arrTmp.count<range)
{
range = self.arrData.count - self.arrTmp.count;
}else //取差赋值给添加刷新数量:小于默认刷新数量时
{
num += range;
}
// 调用方法刷新临时集合内数据源
if (self.arrData.count > self.arrTmp.count)
{
[self.tabv setLoadMoreEnable:YES];
}else //等于时也停止加载
{
[self.tabv setLoadMoreEnable:NO];
}
// 刷新显示在tabView上数据
[self.tabv reloadData];
}
// 显示row的数量
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// tmp的数量:默认先加载20条
if (!self.arrTmp.count)
{
return 20;
}else // 刷新即显示临时集合内数据:把数据源分段添加到临时集合
{
return self.arrTmp.count;
}
}
// 显示数据
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuse" forIndexPath:indexPath];
if (self.arrData.count!=indexPath.row)
{
cell.textLabel.text = self.arrData[indexPath.row];
}
return cell;
}
@end