UITableview能够列表显示许多内容,也是我们开发中经常用的一个组件。我们经常会分页显示列表,如先显示10条记录,点击更多在添加10条,以此类推,下面是实现类似更多显示的一个demo。
实现的效果如下:
点击更多,实现后面的效果.
实现的思路:
基本上就是数据源里先只放10条, 点击最后一个cell时, 添加更多的数据到数据源中.。处理"加载更多"的那个cell的选择事件,触发一个方法来加载更多数据到列表。indexPathForRow插入数据。实现过程如下:
#import <UIKit/UIKit.h>
@interface iphone_tableMoreViewController : UIViewController <UITableViewDelegate,UITableViewDataSource>{ IBOutlet UITableView *myTableView; NSMutableArray *items; } @property (nonatomic,retain) UITableView *myTableView; @property (nonatomic,retain) NSMutableArray *items; @end
#import "iphone_tableMoreViewController.h" @implementation iphone_tableMoreViewController @synthesize items,myTableView; - (void)viewDidLoad { [super viewDidLoad]; items=[[NSMutableArray alloc] initWithCapacity:0]; for (int i=0; i<10; i++) { [items addObject:[NSString stringWithFormat:@"cell %i",i]]; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; }
- (void)viewDidUnload { items=nil; self.myTableView=nil; } - (void)dealloc { [self.myTableView release]; [items release]; [super dealloc]; }
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { int count = [items count]; return count + 1; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *tag=@"tag"; UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:tag]; if (cell==nil) { cell=[[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:tag] autorelease]; } if([indexPath row] == ([items count])) { //创建loadMoreCell cell.textLabel.text=@"More.."; }else { cell.textLabel.text=[items objectAtIndex:[indexPath row]]; } return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == [items count]) { UITableViewCell *loadMoreCell=[tableView cellForRowAtIndexPath:indexPath]; loadMoreCell.textLabel.text=@"loading more …"; [self performSelectorInBackground:@selector(loadMore) withObject:nil]; [tableView deselectRowAtIndexPath:indexPath animated:YES]; return; } //其他cell的事件 } -(void)loadMore { NSMutableArray *more; more=[[NSMutableArray alloc] initWithCapacity:0]; for (int i=0; i<10; i++) { [more addObject:[NSString stringWithFormat:@"cell ++%i",i]]; } //加载你的数据 [self performSelectorOnMainThread:@selector(appendTableWith:) withObject:more waitUntilDone:NO]; [more release]; } -(void) appendTableWith:(NSMutableArray *)data { for (int i=0;i<[data count];i++) { [items addObject:[data objectAtIndex:i]]; } NSMutableArray *insertIndexPaths = [NSMutableArray arrayWithCapacity:10]; for (int ind = 0; ind < [data count]; ind++) { NSIndexPath *newPath = [NSIndexPath indexPathForRow:[items indexOfObject:[data objectAtIndex:ind]] inSection:0]; [insertIndexPaths addObject:newPath]; } [self.myTableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationFade]; } @end
源代码:http://easymorse-iphone.googlecode.com/svn/trunk/iphone.tableMore/
