UITableViewWith Paging Prev,下一个按钮

时间:2013-06-10 10:43:33

标签: iphone ios uitableview

我有一个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

3 个答案:

答案 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];

}

Source Code

答案 1 :(得分:1)

你应该拿两个阵列。 1)包含所有物体的MAIN ARRAY。 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.
}

答案 2 :(得分:0)

  

一个简单的解决方案是,如果您从Web服务访问记录,则要求他提供初始命中的记录总数以及要显示的前6条记录。如果你想做分页,你应该保持第0页或第1页的初始命中服务,当你在第一页上有6条记录,你发现从服务中提供的总记录超过6,那么你必须显示{{ 1}}和previous否则不需要这些按钮。

     

在访问您必须在next buttonNSArray中添加的记录时。当您按Coredata时,您必须增加页数并获取接下来的6条记录并保存到数据库或数组并重新加载表。

     

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

希望这有帮助。