zoukankan      html  css  js  c++  java
  • IOS学习之路十二(UITableView下拉刷新页面)

    今天做了一个下拉刷新的demo,主要用到了实现的开源框架是:https://github.com/enormego/EGOTableViewPullRefresh

    运行结果如下:


    实现很简单下载源代码,加压后把

    然后拷贝资源文件和EGORefreshTableHeaderView.h和EGORefreshTableHeaderView.m到相依的工程中.


    添加QuartzCore.framework组建:


    在tableview所在的类中添加如下代码:

    TableViewController.h

    #import <UIKit/UIKit.h>
    #import "EGORefreshTableHeaderView.h"
    
    @interface TableViewController : UITableViewController<UITableViewDataSource,UITableViewDelegate,EGORefreshTableHeaderDelegate>{
        BOOL isflage;
        BOOL _reloading;
        EGORefreshTableHeaderView *_refreshHeaderView;
        
    }
    @property (strong, nonatomic) IBOutlet UITableView *myTableView;
    //重新加载时调用的的方法
    - (void)reloadTableViewDataSource;
    //完成加载时调用的方法
    - (void)doneLoadingTableViewData;
    @end
    




    TableViewController.m
    //
    //  TableViewController.m
    //  EGOTableViewPullRefreshDemo
    //
    //  Created by WildCat on 13-8-16.
    //  Copyright (c) 2013年 wildcat. All rights reserved.
    //
    
    #import "TableViewController.h"
    
    @interface TableViewController ()
    
    @end
    
    @implementation TableViewController
    @synthesize myTableView;
    
    - (id)initWithStyle:(UITableViewStyle)style
    {
        self = [super initWithStyle:style];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        
            if (_refreshHeaderView==nil) {
                //初始化下拉刷新空间
                EGORefreshTableHeaderView *view1=[[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 10.0f-self.myTableView.bounds.size.height, self.myTableView.bounds.size.width, self.view.bounds.size.height)];
                view1.delegate = self;
                [self.myTableView addSubview:view1];
                _refreshHeaderView = view1;
            }
         
        [_refreshHeaderView refreshLastUpdatedDate];
    }
    
    - (void)viewDidUnload
    {
        [self setMyTableView:nil];
        _refreshHeaderView=nil; 
        [super viewDidUnload];
       
    }
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
        return (interfaceOrientation == UIInterfaceOrientationPortrait);
    }
    #pragma mark onClick
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        isflage=!isflage;
        [super.navigationController setNavigationBarHidden:isflage animated:TRUE];
        [super.navigationController setToolbarHidden:isflage animated:TRUE];
    }
    #pragma mark - Table view data source
    -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
        return [NSString stringWithFormat:@"标题"];
    
    }
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    
        return 10;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"MyCell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        
        if (cell==nil) {
            cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
        cell.textLabel.text=[NSString stringWithFormat:@"这是第 %i 行",indexPath.row];
        return cell;
    }
    
    
    
    #pragma mark - Table view delegate
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // Navigation logic may go here. Create and push another view controller.
        /*
         <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
         // ...
         // Pass the selected object to the new view controller.
         [self.navigationController pushViewController:detailViewController animated:YES];
         */
    }
    #pragma mark –
    #pragma mark Data Source Loading / Reloading Methods
    //重新加载时调用
    - (void)reloadTableViewDataSource{
        NSLog(@"==开始加载数据");
        _reloading = YES;
    }
    
    //完成加载时调用的方法
    
    - (void)doneLoadingTableViewData{
        NSLog(@"===加载完数据");
        _reloading = NO;
        [_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.myTableView];
    }
    #pragma mark –
    #pragma mark UIScrollViewDelegate Methods
    //滚动控件时的委托方法
    
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
        [_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView];
    }
    
    - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
        [_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView];
    }
    #pragma mark –
    #pragma mark EGORefreshTableHeaderDelegate Methods
    //下拉被调用的委托方法
    - (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{
        [self reloadTableViewDataSource];
        [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:3.0];
    }
    //放回当前是刷新还是无刷新状态
    - (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{
        return _reloading;
    }
    //返回刷新时间的回调方法
    - (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{
        return [NSDate date];
    }
    @end
    

    这样就可以成功运行了,如果想把加载改为汉语可以在:

    EGORefreshTableHeaderView.m源码中的

    - (void)setState:(EGOPullRefreshState)aState函数的相应位置修改:

     

    - (void)setState:(EGOPullRefreshState)aState{
    	
    	switch (aState) {
    		case EGOOPullRefreshPulling:
    			
    			_statusLabel.text = NSLocalizedString(@"松开可以刷新...", @"Release to refresh status");
    			[CATransaction begin];
    			[CATransaction setAnimationDuration:FLIP_ANIMATION_DURATION];
    			_arrowImage.transform = CATransform3DMakeRotation((M_PI / 180.0) * 180.0f, 0.0f, 0.0f, 1.0f);
    			[CATransaction commit];
    			
    			break;
    		case EGOOPullRefreshNormal:
    			
    			if (_state == EGOOPullRefreshPulling) {
    				[CATransaction begin];
    				[CATransaction setAnimationDuration:FLIP_ANIMATION_DURATION];
    				_arrowImage.transform = CATransform3DIdentity;
    				[CATransaction commit];
    			}
    			
    			_statusLabel.text = NSLocalizedString(@"下拉刷新...", @"Pull down to refresh status");
    			[_activityView stopAnimating];
    			[CATransaction begin];
    			[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 
    			_arrowImage.hidden = NO;
    			_arrowImage.transform = CATransform3DIdentity;
    			[CATransaction commit];
    			
    			[self refreshLastUpdatedDate];
    			
    			break;
    		case EGOOPullRefreshLoading:
    			
    			_statusLabel.text = NSLocalizedString(@"加载中...", @"Loading Status");
    			[_activityView startAnimating];
    			[CATransaction begin];
    			[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 
    			_arrowImage.hidden = YES;
    			[CATransaction commit];
    			
    			break;
    		default:
    			break;
    	}
    	
    	_state = aState;
    }
    





  • 相关阅读:
    A/B test模块使用以及配置
    Linux下的tar压缩解压缩命令详解
    php mysql转义特殊字符的函数(转)
    cas server + cas client 单点登录 原理介绍
    php二维码的生产以及下载
    shiro 获取已经登录的用户
    Sql 根据多条件查询重复的数据 MySQL删除重复数据
    js base64 转PDF并下载,js baser64转图片并下载
    当同时安装Python2和Python3后,如何兼容并切换使用详解(比如pip使用)
    我的博客初始“话”
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3262743.html
Copyright © 2011-2022 走看看