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 したらちゃんと表示されました!