您的位置:首页 > 产品设计 > UI/UE

UITableView实现分页显示

2013-09-30 17:29 197 查看
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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: