UITableView分页 上拉加载

UITableView分页

UITableView分页上拉加载简单,ARC环境,源码如下,以作备份:

原理是,点击最后一个cell,触发一个事件来处理数据,然后reloadData

RootViewController.m + RootViewController.h

复制代码
#import "RootViewController.h"

@interface RootViewController ()<UITableViewDataSource, UITableViewDelegate>

@property (nonatomic, strong) UITableView     *tableView;
@property (nonatomic, strong) NSMutableArray  *dataSource;

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    _dataSource = [[NSMutableArray alloc] init];
    for (int i = 0; i < 10; i++)
    {
        [_dataSource addObject:[NSString stringWithFormat:@"%d", i]];
    }
    
    _tableView  = [[UITableView alloc] initWithFrame:self.view.bounds
                                               style:UITableViewStylePlain];
    _tableView.dataSource = self;
    _tableView.delegate   = self;
    [self.view addSubview:_tableView];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // 因为要定制最后一行,所以cell多一个
    return _dataSource.count + 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *reusedStr = @"demo";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reusedStr];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:reusedStr];
    }
    
    if([indexPath row] == ([_dataSource count]))
    {
        // 定制最后一行的cell
        cell.textLabel.text=@"获取更多..";
    }
    else
    {
        // 定制普通行的cell
        cell.textLabel.text=[_dataSource objectAtIndex:[indexPath row]];
    }

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 如果是最后一行点击事件,则触发一个事件
    if (indexPath.row == ([_dataSource count]))
    {
        [self performSelectorInBackground:@selector(loadMore)
                               withObject:nil];
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
        return;
    }
}

- (void)loadMore
{
    // 添加数据源
    for (int i = 0; i < 10; i++) {
        [_dataSource addObject:[NSString stringWithFormat:@"新%d", i]];
    }
    
    // 重新加载tableView
    [_tableView reloadData];
}

@end
复制代码
#import <UIKit/UIKit.h>

@interface RootViewController : UIViewController

@end

你可能感兴趣的:(UITableView分页 上拉加载)