以前看到facebook,人人和其他的一些应用,很多都使用了下拉列表,列表就重新加载数据的应用.感觉用户体验很好,但是一直没有时间找相应的解决方法,今天终于有时间整理一下代码:
下图是实现的效果图,当用户下拉列表的时候,就出现向上的箭头.
实现的开源框架是:https://github.com/enormego/EGOTableViewPullRefresh
实现过程很简单,下载相应的demo,然后拷贝资源文件和EGORefreshTableHeaderView.h和EGORefreshTableHeaderView.m到相依的工程中.在table所在的类中添加如下代码:
01 |
#import <UIKit/UIKit.h> |
02 |
#import "EGORefreshTableHeaderView.h" |
03 |
<a href= "http://my.oschina.net/interface" class = "referer" target= "_blank" >@interface</a> iphone_navtaViewController : UIViewController |
04 |
<UITableViewDelegate,UITableViewDataSource,EGORefreshTableHeaderDelegate>{
|
05 |
BOOL isflage; |
06 |
IBOutlet UITableView *myTableView; |
07 |
EGORefreshTableHeaderView *_refreshHeaderView; |
08 |
BOOL _reloading; |
09 |
} |
10 |
@property (nonatomic,retain) UITableView *myTableView; |
11 |
- ( void )reloadTableViewDataSource; |
12 |
- ( void )doneLoadingTableViewData; |
13 |
@end |
实现方法:
01 |
#import "iphone_navtaViewController.h" |
02 |
@implementation iphone_navtaViewController |
03 |
@synthesize myTableView; |
04 |
- ( void )viewDidLoad {
|
05 |
[super viewDidLoad]; |
06 |
if (_refreshHeaderView == nil) {
|
07 |
EGORefreshTableHeaderView *view1 = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 10.0f – self.myTableView.bounds.size.height, self.myTableView.frame.size.width, self.view.bounds.size.height)]; |
08 |
view1.delegate = self; |
09 |
[self.myTableView addSubview:view1]; |
10 |
_refreshHeaderView = view1; |
11 |
[view1 release]; |
12 |
} |
13 |
[_refreshHeaderView refreshLastUpdatedDate]; |
14 |
} |
15 |
- ( BOOL )shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
|
16 |
return (interfaceOrientation == UIInterfaceOrientationPortrait); |
17 |
} |
18 |
- ( void )didReceiveMemoryWarning {
|
19 |
[super didReceiveMemoryWarning]; |
20 |
} |
21 |
- ( void )viewDidUnload {
|
22 |
self.myTableView=nil; |
23 |
_refreshHeaderView=nil; |
24 |
} |
25 |
- ( void )dealloc {
|
26 |
_refreshHeaderView=nil; |
27 |
[self.myTableView release]; |
28 |
[super dealloc]; |
29 |
} |
30 |
#pragma mark – |
31 |
#pragma mark onClick |
32 |
-( void )touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event |
33 |
{
|
34 |
isflage=!isflage; |
35 |
[super.navigationController setNavigationBarHidden:isflage animated:TRUE]; |
36 |
[super.navigationController setToolbarHidden:isflage animated:TRUE]; |
37 |
} |
38 |
#pragma mark – |
39 |
#pragma mark UITableView |
40 |
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
|
41 |
return 1; |
42 |
} |
43 |
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
44 |
return 3; |
45 |
} |
46 |
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
47 |
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@ "tag" ]; |
48 |
if (cell==nil) {
|
49 |
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle |
50 |
reuseIdentifier:@ "tag" ] autorelease]; |
51 |
} |
52 |
//表格设计 |
53 |
return cell; |
54 |
} |
55 |
-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath |
56 |
{
|
57 |
return 100; |
58 |
} |
59 |
60 |
#pragma mark – |
61 |
#pragma mark Data Source Loading / Reloading Methods |
62 |
63 |
- ( void )reloadTableViewDataSource{
|
64 |
NSLog(@ "==开始加载数据" ); |
65 |
_reloading = YES; |
66 |
} |
67 |
68 |
- ( void )doneLoadingTableViewData{
|
69 |
NSLog(@ "===加载完数据" ); |
70 |
_reloading = NO; |
71 |
[_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.myTableView]; |
72 |
} |
73 |
#pragma mark – |
74 |
#pragma mark UIScrollViewDelegate Methods |
75 |
- ( void )scrollViewDidScroll:(UIScrollView *)scrollView{ |
76 |
[_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView]; |
77 |
} |
78 |
79 |
- ( void )scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:( BOOL )decelerate{
|
80 |
[_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView]; |
81 |
} |
82 |
#pragma mark – |
83 |
#pragma mark EGORefreshTableHeaderDelegate Methods |
84 |
- ( void )egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{
|
85 |
[self reloadTableViewDataSource]; |
86 |
[self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:3.0]; |
87 |
} |
88 |
89 |
- ( BOOL )egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{
|
90 |
return _reloading; |
91 |
} |
92 |
- (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{
|
93 |
return [NSDate date]; |
94 |
} |
95 |
@end |
一个最重要的步骤,就是要添加QuartzCore.framework组建。
然后运行即可。
文章出处:http://wangjun.easymorse.com/?p=1193