zoukankan      html  css  js  c++  java
  • 新浪微博项目---首页技术点三.上拉刷新,下拉加载的实现(使用ios自带的小菊花实现)

    一.上拉刷新,下拉加载的实现(使用ios自带的小菊花实现)

      1.下拉刷新

    #pragma mark ---集成下*拉刷新控件
    -(void)setupDownRefresh
    {
       //1.添加刷新控件
        UIRefreshControl *control  = [[UIRefreshControl alloc] init];
        //只有用户通过手动下拉刷新,才会触发UIControlEventValueChanged事件
        [control addTarget:self action:@selector(refreshStateChange:) forControlEvents:UIControlEventValueChanged];
        [self.tableView addSubview:control];
        
        //2.马上进入刷新状态(仅仅是显示刷新状态 并不会触发UIControlEventValueChanged事件)
        [control beginRefreshing];
        
        
        //3.马上加载数据
        [self refreshStateChange:control];
    
    }
    
    
    #pragma mark ---集成下拉刷新控件的addTargat/action方法
    -(void)refreshStateChange:(UIRefreshControl *)control
    {
        //1.请求管理者
        AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
        
        //2.拼接请求参数
        AccountModel *account = [AccountTool account];
        NSMutableDictionary *params = [NSMutableDictionary dictionary];
        params[@"access_token"] = account.access_token;
    
        //取出最前面的微博,(最新的微博 , ID最大的微博)
        StatusFrame *firstStatusf = [self.statusFrames firstObject];
        if (firstStatusf) {
            // 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0
            params[@"since_id"] = firstStatusf.status.idstr;
        }
    
        //3.发送请求
        [mgr GET:@"https://api.weibo.com/2/statuses/friends_timeline.json" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
            
            
            //将"微博字典"数组 转为 "微博模型"数组
            NSArray *newsStatuses  = [StatusModel objectArrayWithKeyValuesArray:responseObject[@"statuses"]];
           
            //将HWStatus模型转为HWStatusFrame模型
            NSArray *newFrames = [self stausFramesWithStatuses:newsStatuses];
     
            //将最新的微博数据,添加到总数组的最前面
            NSRange range = NSMakeRange(0, newFrames.count);
            NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:range];
            [self.statusFrames insertObjects:newFrames atIndexes:set];
    
            //刷新表格
            [self.tableView reloadData];
            //结束刷新
            [control endRefreshing];
            
            
            
            //显示最新的微博数量
            [self showNewStatusCount:newsStatuses.count];
        
            
        }
         failure:^(AFHTTPRequestOperation *operation, NSError *error) {
             
             NSLog(@"请求失败--%@",error);
             //结束刷新
             [control endRefreshing];
             
         }];
    
    }
    
    ----------------------------------------------------------------------------------------------------------
    
    -----------------------------------------------------

       2.上拉加载数据

    #pragma mark ---集成上*拉刷新控件
    -(void)setupUprefresh
    {
        
        LoadMoreFooter *footer = [LoadMoreFooter footer];
        
        self.tableView.tableFooterView = footer;
        
        UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.tableView.frame];
        //调用上拉加载的方法*************
        [self scrollViewDidScroll:scrollView];
        
        footer.hidden  = YES;
        
    }
    
    
    #pragma mark ---加载更多的微博数据  (上拉加载以前数据时使用)
    -(void)loadMoreStatus
    {
    
        //1.请求管理者
        AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
        
        //2.拼接请求参数
        AccountModel *account = [AccountTool account];
        NSMutableDictionary *params = [NSMutableDictionary dictionary];
        params[@"access_token"] = account.access_token;
        
        //取出最前面的微博,(最新的微博 , ID最大的微博)
        StatusFrame *lastStatusf = [self.statusFrames lastObject];
        if (lastStatusf) {
            // 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0
            long long maxId  = lastStatusf.status.idstr.longLongValue - 1;
            params[@"max_id"] = @(maxId);
        }
        
        //3.发送请求
        [mgr GET:@"https://api.weibo.com/2/statuses/friends_timeline.json" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
            
            
            //将"微博字典"数组 转为 "微博模型"数组
            NSArray *newsStatuses  = [StatusModel objectArrayWithKeyValuesArray:responseObject[@"statuses"]];
            
            //将HWStatus模型转为HWStatusFrame模型
            NSArray *newFrames = [self stausFramesWithStatuses:newsStatuses];
    
            //将更多的数据添加到中数组的最后面
            [self.statusFrames addObjectsFromArray:newFrames];
            
    
            //刷新表格
            [self.tableView reloadData];
    
            //结束刷新(隐藏footer)
            self.tableView.tableFooterView.hidden = YES;
            
            
        }
         failure:^(AFHTTPRequestOperation *operation, NSError *error) {
             
             NSLog(@"请求失败--%@",error);
    
             //结束刷新
             self.tableView.tableFooterView.hidden = YES;
             
         }];
    
    }
     
     
     
     
  • 相关阅读:
    Remove Linked List Elements
    Count Primes
    Isomorphic Strings
    Read N Characters Given Read4 II
    Word Ladder II Graph
    Word Ladder
    Binary Tree Right Side View
    House Robber
    Find non-overlap jobs with max cost
    Find Peak Element
  • 原文地址:https://www.cnblogs.com/erdeng/p/4925570.html
Copyright © 2011-2022 走看看