#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