iPhone开发笔记(17)使用EGOTableViewPullRefresh实现列表的下拉刷新功能

    在许多应用中都有下拉刷新这一功能,这使得数据的刷新变得非常容易。EGOTableViewPullRefresh使得实现这一功能变得非常简单,下面就说明一下如何将这个功能添加到我自己的应用中。

    1、到github上下载EGOTableViewPullRefresh

          https://github.com/enormego/EGOTableViewPullRefresh

    2、下载后的文件夹中包含以下内容

        

    将EGOTableViewPullRefresh中的Resources文件夹中的所有图片全部都拷贝到自己的工程的Resources文件夹下,这些图片是下拉箭头及tableView的headerView的背景图片。在EGOTableViewPullRefresh文件夹下的Classes文件夹下的View文件夹下有两个文件,分别是EGORefreshTableHeaderView.h和EGORefreshTableHeaderView.m文件,将这两个文件放到自己的工程下。到此为止准备工作就做完了。

    3、下拉是一个刷新的工作,所以需要我们添加的代码无非就是数据刷新的代码。

(1)在.h文件中添加如下代码

@interface ...ViewController : UITableViewController<EGORefreshTableHeaderDelegate>
{
    EGORefreshTableHeaderView *refreshTableHeaderView;
    BOOL reloading;
}
- (void)reloadTableViewDataSource;
- (void)doneLoadingTableViewData;

(2)在- (void)viewDidLoad函数中添加下面的代码。

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];

(3)在对应的.m文件中添加如下方法

#pragma mark -
#pragma mark Data Source Loading / Reloading Methods
//更新列表数据
- (void)reloadTableViewDataSource{
    [NSThread detachNewThreadSelector:@selector(updateNewsByPullTable) toTarget:self withObject:nil]; //异步加载数据,不影tableView动作
    reloading = YES;	
}
//调用JSON服务获取数据
- (void)updateNewsByPullTable
{
    NSString *str = @"http://....../getAllNews.aspx";
    NSURL *url = [NSURL URLWithString:str];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request startSynchronous];
    
    //接收返回数据
    NSString *response = [request responseString];
    NSLog(@"%@",response);
    self.data = [response JSONValue];
    [self.tableView reloadData];
}

- (void)doneLoadingTableViewData{
	
	//model should call this when its done loading
	reloading = NO;
	[refreshTableHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tableView];
	
}

#pragma mark -
#pragma mark UIScrollViewDelegate Methods

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{	
	
	[refreshTableHeaderView egoRefreshScrollViewDidScroll:scrollView];
    
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
	
	[refreshTableHeaderView 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; // should return if data source model is reloading
	
}

- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{
	
	return [NSDate date]; // should return date data source was last changed
	
}


4、总结

    总的来说,实现这一功能并不复杂,关键在于-(void)reloadTableViewDataSource这一方法。这里我试了一下,读取数据的操作必须是异步的,要不然和tableView下拉再上弹这个动作会有很明显的延迟。再一次感受到了开源类库的强大,感谢这些大神们的无私贡献,让我们这些iOS开发初学者有机会能做出漂亮的应用。



  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值