IOS学习之路十二(UITableView下拉刷新页面)
2013-09-05 22:26 Lves Li 阅读(1602) 评论(0) 编辑 收藏 举报今天做了一个下拉刷新的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 ()<<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">EGORefreshTableHeaderDelegate</span>>
- @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;
- }
转载请注明:
原文转载自:http://blog.csdn.net/wildcatlele
新浪微博:http://weibo.com/u/3202802157