ios下拉刷新,基于EGOTableV…

来源:互联网 发布:游戏门户网站源码php 编辑:程序博客网 时间:2024/06/07 08:36
原文地址:ios下拉刷新,基于EGOTableViewPullRefresh框架实现作者:2B青年Bug多

1、创建项目将EGOTableViewPullRefresh框架放入项目中,并且再加入QuartzCore.framework因为EGOTableViewPullRefresh会用到这个框架。



2、在控制器中(ViewController)放入一个UITableView控件并且设置好关联跟代理,实现UITableView的代理函数,并且加入一些测试数据。

[java] view plaincopyprint?

#import"PullViewController.h"


@interface PullViewController(){

   //测试数据

    NSMutableArray*tableData;

}


@end


@implementationPullViewController


- (id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil

{

    self = [superinitWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {

    }

   return self;

}


- (void)viewDidLoad

{

   //初始化一些数据用来填充tableView

    tableData =[[NSMutableArray alloc] initWithObjects:@"java",@"c/c++",@"python",@"objective-c",@"javascript",nil];

   

    [super viewDidLoad];

}


- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

}


//返回tableView的分区个数

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{

    return 1;

}


//返回tableView的行数

-(NSInteger)tableView:(UITableView *)tableViewnumberOfRowsInSection:(NSInteger)section{

    return [tableData count];

}


//填充tableView的数据

-(UITableViewCell*)tableView:(UITableView *)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath{

   

   UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:@"Cell"];

    if(cell==nil){

       cell =[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:@"Cell"];

    }

   

   cell.textLabel.text = [tableData objectAtIndex:indexPath.row];

    return cell;

}


运行效果:



4、在控制器头文件中导入EGOTableViewPullRefresh并且加入框架协议,定义两个刷新数据的函数:

[cpp] view plaincopyprint?

#import

#import"EGORefreshTableHeaderView.h"


@interface PullViewController: UIViewController {

    BOOL reloading;

   EGORefreshTableHeaderView *refreshTableHeaderView;

   

}

@property (retain, nonatomic)IBOutlet UITableView *tableView;


- (IBAction)reloadButton:(id)sender;


//function:


- (void)reloadTableViewDataSource;//开始加载时调用此方法

- (void)doneLoadingTableViewData;//完成加载时调用此方法



@end


5、在.m文件里的viewDidLoad函数中初始化EGOTableViewPullRefresh

[cpp] view plaincopyprint?

- (void)viewDidLoad

{

   //初始化一些数据用来填充tableView

    tableData =[[NSMutableArray alloc] initWithObjects:@"java",@"c/c++",@"python",@"objective-c",@"javascript",nil];

   

   //初始化EGOTableViewPullRefresh

    if (refreshTableHeaderView ==nil) {

       EGORefreshTableHeaderView*view = [[EGORefreshTableHeaderView alloc]initWithFrame:CGRectMake(0.0f,0.0f - self.tableView.bounds.size.height,self.view.frame.size.width,self.tableView.bounds.size.height)];

       view.delegate = self;

       [self.tableView addSubview:view];

       refreshTableHeaderView =view;

       [view release];

    }

   

   //更新刷新时间

   [refreshTableHeaderView refreshLastUpdatedDate];

   

    [super viewDidLoad];

}


6、实现EGOTableViewPullRefresh的函数实现下拉刷新:reloadTableViewDataSource函数是刚刚在头文件中定义的函数,用来实现刷新数据在代码中让线程睡眠一段时间模仿数据调用的时间,并且给tableView增加一些新的数据最后刷新tableViewdoneloadingTableViewData函数也是在头文件中定义的函数用来结束下拉刷新。

[cpp] view plaincopyprint?

#pragma mark - 下拉操作:

- (void)reloadTableViewDataSource{

    reloading =YES;

   //线程睡眠一段时间,模仿数据调用

   [NSThreadsleepForTimeInterval:3];

   

   //tableView添加一些数据

    [tableDataaddObjectsFromArray:[[NSArray alloc] initWithObjects:@"c#",@"php",@"t-sql", nil]];

   //刷新tableView

    [self.tableView reloadData];

   //后台操作线程执行完后,到主线程停止界面的刷新

    [self performSelectorOnMainThread:@selector(doneLoadingTableViewData)withObject:nil waitUntilDone:YES];

}


- (void)doneLoadingTableViewData{

    reloading =NO;

   //结束下拉刷新

   [refreshTableHeaderViewegoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];

}




//tableView滚动时就会调用这个函数

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

   NSLog(@"滚动时调用");

   [refreshTableHeaderViewegoRefreshScrollViewDidScroll:scrollView];

   

}

//tableView滚动结束时就会调用这个函数

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{

   NSLog(@"滚动结束时调用");

   [refreshTableHeaderViewegoRefreshScrollViewDidEndDragging:scrollView];

   

}


#pragma mark EGORefreshTableHeaderDelegatefunction:

//当弹出下拉界面时调用此函数

- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{

   NSLog(@"下拉界面时");

   //调用reloadTableViewDataSource函数刷新tableView;

   [NSThreaddetachNewThreadSelector:@selector(reloadTableViewDataSource) toTarget:self withObject:nil];

}


- (BOOL)egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{

    return reloading;

   

}


//最后一次改变的数据

- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{

   return[NSDate date];

}


实现效果:

刷新后新增加的数据:


7、实现手动下拉刷新效果,为ViewController的界面中加入一个toolbar空间并且在toolbar上加入一个itembutton设置好关联:



8、编写手动下拉刷新代码:

[cpp] view plaincopyprint?

#pragma mark 手动调用下拉刷新函数

-(void) ViewFrashData{

   //设置tableView的高度触发刷新事件

    [self.tableViewsetContentOffset:CGPointMake(0,-75) animated:YES];

   

    [self performSelector:@selector(doneManualRefresh) withObject:nil afterDelay:0.4];

}


//结束刷新

-(void)doneManualRefresh{

   [refreshTableHeaderView egoRefreshScrollViewDidScroll:self.tableView];

   [refreshTableHeaderViewegoRefreshScrollViewDidEndDragging:self.tableView];

}


//刷新按钮事件

- (void) reloadInfo{

   //手动下拉刷新相关

    [self ViewFrashData];

}


//点击按钮刷新tableView

- (IBAction)reloadButton:(id)sender {

    [self reloadInfo];

}





 


0 0