zoukankan      html  css  js  c++  java
  • iOS之UITableView的上拉刷新

    #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
  • 相关阅读:
    《时间的朋友》2017跨年演讲:观后感
    如何实现目标?
    不患贫而患不均
    科学地定目标(附我的目标)
    书单:我的“基本书”
    你只有非常努力,才能看起来毫不费力
    买书?买知识?
    论知识与技能
    【读书笔记】《代码不朽》
    【工作实践】如何创新?
  • 原文地址:https://www.cnblogs.com/pruple/p/5330739.html
Copyright © 2011-2022 走看看