0

私はNSMutableArrayレコード数(52と仮定)を持つものを持っています。

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

テーブルビューの下部にページングの [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

2 つの配列を取る必要があります。1) すべてのオブジェクトを含む MAIN ARRAY。2) 一時配列には 6 つのオブジェクトのみが含まれます。

テーブルビューのロード中に、その一時配列を使用します。

現在のページをカウントするページ カウンターを保持します。

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 を超えることがわかった場合は、表示する必要がpreviousありnext buttonます。これらのボタンは必要ありません。

NSArrayレコードにアクセスするときは、または に入れる必要がありますCoredata。押すnext buttonと、ページ数を増やして次の 6 レコードを取得し、DB または配列に保存してテーブルをリロードする必要があります。

押すprevious buttonと、配列から最後の6つのオブジェクトを削除する必要があります。または、最後の6つのレコードを削除またはチェックして、テーブルを表示およびリロードできます。

お役に立てれば。

于 2013-06-10T11:25:11.827 に答える