UITableView 实现分页显示的代码
来源:互联网 发布:检测显卡的软件 编辑:程序博客网 时间:2024/05/18 01:52
UITableview 能够列表显示许多内容,也是我们开发中经常用的一个组件。我们经常会分页显示列表,如先显示 10 条记录,点击更多在添加 10 条,以此类推,下面是实现类似更多显示的一个 demo。 实现的效果如下: 点击 “More…”,实现后面的效果. 实现的思路: 基本上就是数据源里先只放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/