#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

 

posted on 2016-03-28 21:40  pruple_Boy  阅读(397)  评论(0编辑  收藏  举报