0

我有一个NSMutableArray记录数(假设为 52)。

for (int i=0;i<=52;i++) {
    [arrSavedCalculation addObject:[NSString stringWithFormat:@"Bianca lb,Red %d",i]];
}

我想在 tableview 的底部提供一个分页 Prev 和 Next 按钮。并且每页显示 6 条记录。我该怎么做。我也看到了这个文件,但没有成功 http://www.ke-cai.net/2011/04/pagination-with-uitableview-in-ios.html

4

3 回答 3

3

试试这些。测试并发现工作。可以改进。

@interface ViewController (){
    //pageNumber will hold the current page index
    NSInteger _pageNumber;
    //keeping the max page number for ease of calculation
    NSUInteger _maxPageNumber;
    //the batch size
    NSUInteger _numberOfVisibleRows;
}

@end

@implementation ViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    //Main data array is formed
    NSUInteger rows = 0;
    NSMutableArray *tempArray = [NSMutableArray array];
    while (rows<52) {

        [tempArray addObject:[NSString stringWithFormat:@"Item %d",rows+1]];
        rows++;
    }

    self.mainArray = [NSArray arrayWithArray:tempArray];

    _pageNumber = 0;
    _numberOfVisibleRows = 5;
    _maxPageNumber = [self.mainArray count]/_numberOfVisibleRows;

    self.subArray = [self subArrayForPageNumber:_pageNumber];

}

- (NSArray *)subArrayForPageNumber:(NSUInteger)pageNumber{

    NSRange range = NSMakeRange(_pageNumber*_numberOfVisibleRows, _numberOfVisibleRows);
    if (range.location+range.length>[self.mainArray count]) {
        range.length = [self.mainArray count]-range.location;
    }
   return [self.mainArray subarrayWithRange:range];
}

- (IBAction)buttonPressed:(UIBarButtonItem *)button{
    //Same method is used for calculating the page numbers
    if (button.tag ==1) {
        _pageNumber= MIN(_maxPageNumber, _pageNumber+1);
    }else{
        _pageNumber = MAX(0, _pageNumber-1);
    }

    self.subArray = [self subArrayForPageNumber:_pageNumber];
    [self.tableView reloadData];

}

源代码

于 2013-06-10T11:21:31.093 回答
1

你应该拿两个数组。1)您的主阵列包含所有对象。2) 一个临时数组只包含 6 个对象。

加载 tableview 时使用该临时数组。

保留一个页面计数器,它将计算您当前的页面。

根据您的 52 个对象,您可以拥有 52/6 = 9 页,但最后一页仅包含 4 个对象。

喜欢。

#define kNumberOfObjectInOnePage 6 
set self.page=0 in "viewDidLoad" //self.page is the page counter.
-(void)nextPage:(id)sender{
    self.page++;
    take 6 objects from main array into temp array
    reload your table view.
}

-(void)previous:(id)sender{
    self.page--;
    take 6 previous object into temp array
    reload your table view.
}
于 2013-06-10T11:10:13.530 回答
0

一个简单的解决方案是,如果您从 Web 服务访问记录,然后要求他提供初始命中的记录总数以及要显示的前 6 条记录。如果你想进行分页,你应该在最初点击服务时保留第 0 页或第 1 页,因为你在第一页有 6 条记录,你发现服务提供的总记录超过 6 条,那么你必须显示previousnext button否则不需要这些按钮。

当您访问记录时,您必须将其放入 anNSArrayCoredata. 当您按下时,next button您必须增加页数并获取接下来的 6 条记录并保存到数据库或数组并重新加载表。

如果您按下previous button,您必须从数组中删除最后 6 个对象,或者您可以删除或检查某种最后 6 条记录以显示和重新加载表。

希望这可以帮助。

于 2013-06-10T11:25:11.827 回答