15

アプリケーションにテーブルビューがあり、そこにさまざまなタイプのセルを読み込んでいます。これは問題なく、うまく機能しています。しかし今、私は改ページをする必要があります。ページ番号を1、2などとしてサービスに渡し、1ページ目が終了したときにそれをロードする必要があります。最初のものの場合、カウントは5です。その後、スクロールが終了したら、次のものをロードする必要があります。私はこのページネーションに不慣れです。誰かが私に従うべき方向を教えてもらえますか?私はこのように試みましたが、それは無限ループになります `

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *) cell     forRowAtIndexPath:(NSIndexPath *)indexPath
{
    int count1 = [array count];
    NSLog(@"%d",count1);
     NSLog(@"%d",indexPath.section);
    NSLog(@"%d",max);
    NSLog(@"%d",min);

    if(indexPath.section == count1 - 1) // If going to display last row available in your source
    {

        NSLog(@"%d",max);
          NSLog(@"%d",min);


        if(min <= max) 
        {



            [self getmessages:min];
        }
        else
        {
            self.mtableview.tableFooterView = nil; //You can add an activity indicator in tableview's footer in viewDidLoad to show a loading status to user.
        }

    }
}

`

4

2 に答える 2

10

UITableView can support skimming through many rows of data, however fetching large amounts of remote data can slow down your app, use up too much memory, and bog down your web server. This is all wasteful if users aren't ever going to scroll down that far. In this episode you'll learn how to perform automatic UITableView paging using an easy technique.

Initialization

- (void)viewDidLoad {
    [super viewDidLoad];

    self.beers = [NSMutableArray array];
    _currentPage = 0;
}

Issue HTTP Request for the current page

- (void)fetchBeers {
    NSString *urlString = [NSString 
      stringWithFormat:@"http://localhost:3000/beers.json?page=%d", 
      _currentPage];
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    AFJSONRequestOperation *operation = 
      [[AFJSONRequestOperation alloc] initWithRequest:request];
    [operation setCompletionBlockWithSuccess:
      ^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"responseObject %@", responseObject);

        _totalPages = [[responseObject 
          objectForKey:@"total_pages"] intValue];

        for (id beerDictionary in [responseObject 
                                    objectForKey:@"beers"]) {
            Beer *beer = [[Beer alloc] 
              initWithDictionary:beerDictionary];
            if (![self.beers containsObject:beer]) {
                [self.beers addObject:beer];
            }

            [beer release];
        }

        [self.tableView reloadData];

    } failure:
      ^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", [error localizedDescription]);
        [[[[UIAlertView alloc] 
          initWithTitle:@"Error fetching beers!"
                message:@"Please try again later"
               delegate:nil
          cancelButtonTitle:@"OK"
          otherButtonTitles:nil] autorelease] show];
    }];

    [operation start];
    [operation release];
}

Offset number of rows

- (NSInteger)tableView:(UITableView *)tableView 
 numberOfRowsInSection:(NSInteger)section {
    if (_currentPage == 0) {
        return 1;
    }

    if (_currentPage < _totalPages) {
        return self.beers.count + 1;
    }
    return self.beers.count;
}

Render the cells

- (UITableViewCell *)beerCellForIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellIdentifier = @"cell";
    UITableViewCell *cell = [self.tableView 
dequeueReusableCellWithIdentifier:cellIdentifier];
    if (!cell) {
        cell = [[[UITableViewCell alloc] 
            initWithStyle:UITableViewCellStyleSubtitle
          reuseIdentifier:cellIdentifier] autorelease];
    }

    Beer *beer = [self.beers objectAtIndex:indexPath.row];
    cell.textLabel.text = beer.name;
    cell.detailTextLabel.text = beer.brewery;

    return cell;
}

- (UITableViewCell *)loadingCell {
    UITableViewCell *cell = [[[UITableViewCell alloc] 
                 initWithStyle:UITableViewCellStyleDefault
               reuseIdentifier:nil] autorelease];

    UIActivityIndicatorView *activityIndicator = 
      [[UIActivityIndicatorView alloc] 
      initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    activityIndicator.center = cell.center;
    [cell addSubview:activityIndicator];
    [activityIndicator release];

    [activityIndicator startAnimating];

    cell.tag = kLoadingCellTag;

    return cell;
}

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row < self.beers.count) {
        return [self beerCellForIndexPath:indexPath];
    } else {
        return [self loadingCell];
    }
}

Fetching the next page

- (void)tableView:(UITableView *)tableView 
  willDisplayCell:(UITableViewCell *)cell 
forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (cell.tag == kLoadingCellTag) {
        _currentPage++;
        [self fetchBeers];
    }
}

This example is from NSScreencast Episode 8 - Automatic UITableViewPaging.

于 2012-12-17T10:13:09.200 に答える
0

投稿したコードから: indexPath.section が必要ですか? セクションを使用している場合は、 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableViewメソッドが - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section.

それでも問題が解決しない場合は、上記のメソッド コードを投稿してください。

于 2012-12-20T06:05:56.163 に答える