bekkou68 の日記

Gogengo! や IT 技術など。

UIViewController で UITableView を実装する(XCode/Objective-C 開発)

ゴール

"hoge", "fuga", "piyo" という 3行の TableView を表示する。

前提

TableView を追加したい ViewController はつくられている前提で話を進めます。

手順

まず xib ファイルで TableView を選んで設置します。次に TableView を選択して Control を押しながら File's Owner にドラッグアンドドロップします。そこで delegate と dataSource それぞれに丸いチェックをつけます(両方つけること!)。

ソースコードの変更は次のような方針でおこないます。UITableView のデータソースになるには UITableViewDataSource プロトコルに準拠したメソッドを2つ実装しておく必要があります。データソースとは「データのもととなるもの」で、今回は「テーブルに含まれる行の数と内容を知っているもの」です。

その2つメソッドは tableView:numberOfRowsInSection: と tableView:cellForRowAtIndexPath: です。tableView:numberOfRowsInSection: はテーブルの行数を返します。tableView:cellForRowAtIndexPath: は tableView:numberOfRowsInSection: の戻り値の回数だけ呼ばれるメソッドで、実際に表示する行を一行ずつ返します。

ソースコードは次のように編集します。

ViewController.h

- @interface ViewController : UIViewController
+ // TableView のデータソースになるために必要
+ @interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> { 
+ }

ViewController.m

+ NSMutableArray *items; // 行の内容

  - (void)viewDidLoad
  {
      [super viewDidLoad];
    
+     items = [[NSMutableArray alloc] init];
+     [items addObject:@"hoge"];
+     [items addObject:@"fuga"];
+     [items addObject:@"piyo"];
  }

+ // TableView の行数をつたえる
+ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+     return [items count];
+ }

+ // TableView の各行の中身をつたえる
+ - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    UITableViewCell *cell = [[UITableViewCell alloc] init];
+    cell.textLabel.text = [items objectAtIndex:indexPath.row];
+    return cell;
+ }

Run したらちゃんと表示されました!