以前看到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>{ |
06 | IBOutlet UITableView *myTableView; |
07 | EGORefreshTableHeaderView *_refreshHeaderView; |
10 | @property (nonatomic,retain) UITableView *myTableView; |
11 | - ( void )reloadTableViewDataSource; |
12 | - ( void )doneLoadingTableViewData; |
实现方法:
01 | #import "iphone_navtaViewController.h" |
02 | @implementation iphone_navtaViewController |
03 | @synthesize myTableView; |
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; |
13 | [_refreshHeaderView refreshLastUpdatedDate]; |
15 | - ( BOOL )shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { |
16 | return (interfaceOrientation == UIInterfaceOrientationPortrait); |
18 | - ( void )didReceiveMemoryWarning { |
19 | [super didReceiveMemoryWarning]; |
21 | - ( void )viewDidUnload { |
23 | _refreshHeaderView=nil; |
26 | _refreshHeaderView=nil; |
27 | [self.myTableView release]; |
32 | -( void )touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event |
35 | [super.navigationController setNavigationBarHidden:isflage animated:TRUE]; |
36 | [super.navigationController setToolbarHidden:isflage animated:TRUE]; |
39 | #pragma mark UITableView |
40 | - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { |
43 | - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { |
46 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { |
47 | UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@ "tag" ]; |
49 | cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle |
50 | reuseIdentifier:@ "tag" ] autorelease]; |
55 | -(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath |
61 | #pragma mark Data Source Loading / Reloading Methods |
63 | - ( void )reloadTableViewDataSource{ |
68 | - ( void )doneLoadingTableViewData{ |
71 | [_refreshHeaderView egoRefreshScrollViewDataSourceDidFinishedLoading:self.myTableView]; |
74 | #pragma mark UIScrollViewDelegate Methods |
75 | - ( void )scrollViewDidScroll:(UIScrollView *)scrollView{ |
76 | [_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView]; |
79 | - ( void )scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:( BOOL )decelerate{ |
80 | [_refreshHeaderView egoRefreshScrollViewDidEndDragging:scrollView]; |
83 | #pragma mark EGORefreshTableHeaderDelegate Methods |
84 | - ( void )egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{ |
85 | [self reloadTableViewDataSource]; |
86 | [self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:3.0]; |
89 | - ( BOOL )egoRefreshTableHeaderDataSourceIsLoading:(EGORefreshTableHeaderView*)view{ |
92 | - (NSDate*)egoRefreshTableHeaderDataSourceLastUpdated:(EGORefreshTableHeaderView*)view{ |
一个最重要的步骤,就是要添加QuartzCore.framework组建。
然后运行即可。
文章出处:http://wangjun.easymorse.com/?p=1193