QA@IT

objective-c UITableViewのページングについて

3268 PV

はじめまして、僕はObjective-C初心者なんですが、
現在練習で、Wordpressの記事を読めるアプリを作っています。

そこで、記事をテーブルに表示させることは出来たのですが、
全記事が表示されていない状態で、表示されている記事より前の記事は表示できないです><

なので、UIScrollViewなどでページングして、全記事を表示したいです。

質問が下手くそで申し訳ないですが、宜しくお願い致します。

ちなみに、記事を表示させているコードはこちらです。

#import "TableViewController.h"

@interface TableViewController () {

NSDictionary *item;
NSString *blgtitle;
NSString *link;

}

@end

@implementation TableViewController

  • (id)initWithStyle:(UITableViewStyle)style
    {
    self = [super initWithStyle:style];
    if (self) {
    // Custom initialization
    }
    return self;
    }

  • (void)viewDidLoad
    {
    [super viewDidLoad];

    self.tableView.delegate = self;
    self.tableView.dataSource = self;

    // 空の配列を用意
    self.items = [NSArray array];

    [self getJSON];

}

  • (void)getJSON
    {

    NSURL *url = [NSURL URLWithString:@"http://domaim/wp-json/posts"];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

    NSDictionary *jsonDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    
    // アプリデータの配列をプロパティに保持
    //NSArray * values = [jsonDictionary allValues];
    self.items = jsonDictionary;
    // TableView をリロード
    [self.tableView reloadData];
    

    }];
    }

// セルの数を設定

  • (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [self.items count]; }

// テーブルセルの内容を設定

  • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }

    item = [self.items objectAtIndex:indexPath.row];

    cell.textLabel.text = [item objectForKey:@"title"];

    return cell;
    }

  • (void)tableView:(UITableView )tableView didSelectRowAtIndexPath: (NSIndexPath) indexPath{
    item = [self.items objectAtIndex:indexPath.row];
    blgtitle = [item objectForKey:@"title"];
    link = [item objectForKey:@"link"];
    // toViewController
    [self performSegueWithIdentifier:@"toViewController" sender:self];
    }

  • (void)prepareForSegue:(UIStoryboardSegue )segue sender:(id)sender{
    // identifier が toViewController であることの確認
    if ([[segue identifier] isEqualToString:@"toViewController"]) {
    ViewController *vc = (ViewController
    )[segue destinationViewController];
    // 移行先の ViewController に画像名を渡す
    vc.blgtitle = blgtitle;
    vc.link = link;
    }
    }

  • (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
    //一番下までスクロールしたかどうか
    if(self.tableView.contentOffset.y >= (self.tableView.contentSize.height - self.tableView.bounds.size.height))
    {
    //ここで次に表示する件数を取得して表示更新の処理を書けばOK
    }
    }

  • (void)didReceiveMemoryWarning
    {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

@end

ウォッチ

この質問への回答やコメントをメールでお知らせします。