我有一个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
答案 0 :(得分: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];
}
答案 1 :(得分:1)
加载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.
}
答案 2 :(得分:0)
一个简单的解决方案是,如果您从Web服务访问记录,则要求他提供初始命中的记录总数以及要显示的前6条记录。如果你想做分页,你应该保持第0页或第1页的初始命中服务,当你在第一页上有6条记录,你发现从服务中提供的总记录超过6,那么你必须显示{{ 1}}和
previous
否则不需要这些按钮。在访问您必须在
next button
或NSArray
中添加的记录时。当您按Coredata
时,您必须增加页数并获取接下来的6条记录并保存到数据库或数组并重新加载表。如果按
next button
,则必须从数组中删除最后6个对象,或者可以删除或检查某些最后6条记录以显示和重新加载表。
希望这有帮助。