您的位置:首页 > 编程语言 > Go语言

EGOTableViewPullRefresh 使用

2015-10-06 19:39 483 查看
在许多应用中都有下拉刷新这一功能,这使得数据的刷新变得非常容易。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) {

<span style="white-space:pre"> </span>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下拉再上弹这个动作会有很明显的延迟。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: