SAMIR RATHOD
SAMIR RATHOD

Reputation: 3510

UITableViewWith Paging Prev,next button

I have one NSMutableArray that has number of records (suppose 52).

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

I want to give a paging Prev and Next button at bottom of tableview. and each page display 6 record.How can i do this. i also see this document but not success http://www.ke-cai.net/2011/04/pagination-with-uitableview-in-ios.html

Upvotes: 0

Views: 1070

Answers (3)

iEinstein
iEinstein

Reputation: 2100

A simple solution is if you are accessing records from web service then ask to him provide the total number of records in initial hits as well as first 6 records to display. If you want to do paging you should keep page 0 or 1 at initial hit to service and as you got 6 records on first page and you find that total records which are given from service is more than the 6 then you have to show previous and next button otherwise no need of these button.

As you accessing the records you have to put into in an NSArray or in Coredata. When you press next buttonyou have to increase the page count and fetch next 6 records and save to DB or array and reload the table.

if you press previous button you have to remove last 6 object from array or you can delete or check some kind last 6 records to display and reload table.

Hope this helps.

Upvotes: 0

Anupdas
Anupdas

Reputation: 10201

Try with these. Tested and found working. Can be improved.

@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

Upvotes: 3

Ashim
Ashim

Reputation: 286

you should take two array. 1) Your MAIN ARRAY containing all of objects. 2) A Temporary array contain only 6 objects.

While loading tableview use that Temporary Array.

keep a page counter which will count your current page.

According to your 52 objects you can have 52/6 = 9 page but last page contain only 4 object.

like.

#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.
}

Upvotes: 1

Related Questions