视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
关于下拉更新框架EGORefreshTableHeaderView在Xcode4.2中,ARC
2020-11-09 07:26:35 责编:小采
文档

关于如何在页面中使用EGORefreshTableHeaderView的文章网上一大把, 抄来抄去的, 但也都没什么大问题. 只是在XCode4.2的ARC环境中使用的时候, 错误一把. 借此机会, 完整的记录一下如何排除错误, 及使用的方法. 首先第一步当然是下载这个下拉更新的框架了. htt

关于如何在页面中使用EGORefreshTableHeaderView的文章网上一大把, 抄来抄去的, 但也都没什么大问题. 只是在XCode4.2的ARC环境中使用的时候, 错误一把. 借此机会, 完整的记录一下如何排除错误, 及使用的方法.

首先第一步当然是下载这个下拉更新的框架了. https://github.com/enormego/EGOTableViewPullRefresh/downloads


下载之后解包, 然后将

EGORefreshTableHeaderDelegate.h

EGORefreshTableHeaderDelegate.m

这两个文件, 以及项目中的图片文件都复制到你的项目文件内, 这时候, 如果你启用了ARC, 应该会报一片错误, 让我们来具体看一下.


启用了ARC之后, 就不允许手动的release了, 因此, [view release], [lable release] 还有 autorelease这样的代码都需要删除掉.

在EGORefreshTableHeaderDelegate.m的这个文件中, @synthesize delegate=_delegate; 会报错, "Existing ivar 'delegate' for assign property 'delegate' must be...

解决办法是需要将EGORefreshTableHeaderDelegate.h文件中的 assign 换为retain

//@property(nonatomic,assign) id  delegate; //删除掉. 换为下面的
@property(nonatomic,retain)id  delegate;

这样代码就会通过编译了~ 这样就需要将EGORefreshTableHeaderView与我们的tableview整合了, 然后按照Demo的方法,

添加EGORefreshTableHeaderDelegate的接口,

定义_reloading, 和EGORefreshHeaderView

声明reloadTableViewDataSource和doneLoadingTableView这两个函数

#import 
#import "EGORefreshTableHeaderView.h"

@interface FMFutureMessage : UIViewController
{
 BOOL _reloading;
 EGORefreshTableHeaderView *_refreshHeaderView;
}

@property(strong, nonatomic) IBOutlet UITableView *tbView;

-(void)reloadTableViewDataSource;
-(void)doneLoadingTableViewData; 
@end

接下来, 我们需要将xib文件中的TableViewController与这里定义的tbView建立关联, 因为我忘记了指定tbView与XIB中的TabViewController, 导致了刷新箭头怎么样也显示不出来, 所以一定不要忘记啊~~~~
现在我们处理一下.m文件

处理m文件, 建立关联.和响应事件.

- (void)viewDidLoad
{
 [super viewDidLoad];
 // Do any additional setup after loading the view from its nib.
 if(_refreshHeaderView == nil)
 {
 EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tbView.bounds.size.height, self.view.frame.size.width, self.tbView.bounds.size.height)];
 
 view.delegate = self;
 [self.tbView addSubview:view];
 _refreshHeaderView = view;
 }
 [_refreshHeaderView refreshLastUpdatedDate];
}


响应事件, 事件的响应代码就简单的多了, 按照DEMO的方法, 把接口的函数都声明了就OK了.
 
-(void)reloadTableViewDataSource
{
 NSLog(@"==开始加载数据");
 [self.tbView reloadData];
 _reloading = YES;
 
}
- (void)doneLoadingTableViewData{ 
 
 NSLog(@"===加载完数据"); 
 // model should call this when its done loading 
 _reloading = NO; 
 [_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.tbView]; 
 
 
} 
#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; // should return if data source model is reloading 
 
} 
- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{ 
 
 return [NSDate date]; // should return date data source was last changed 
 
}

最后, 如果是开发中文应用程序, 不要忘记进入EGORefreshTableHeaderView.m中, 将提示的英文换成中文.


好了, 完成~~~

下载本文
显示全文
专题