UITableView实现分页显示

    技术2022-05-13  8

    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/


    最新回复(0)