2013年7月7日日曜日

UITableViewの基礎

iOSアプリによくあるテーブル形式のViewControllerを作ります。


まずはテキトーにプロジェクトを作ります。
最初にもとからあるViewControllerを削除します。 デフォルトのViewController選択して(メニューバーをクリックして)delete。ヘッダーファイルとソースファイルも削除。



右ペインから「Table View Controller」をドラッグして貼り付けます。



 ViewControllerを貼り付けただけでは何の意味もないので、対応するクラスを実装します。「File」メニューから「New」-> 「File」をクリックします。


「Class」を適当な名前に設定し、「Subclass of」を 「UITableViewController」に設定します。


 ViewControllerとClassを関連付けます。右ペインのIdentity Inspectorをクリックして、Custom Classの「Class」にクラス名、Identityの「Storyboard ID」にヘッダーファイル名を入力します。(ぶっちゃけ後で気づいたけどCustom Classだけの設定でいいのね)


そして中にコードを埋め込んでいきます。UITableViewのClassを追加すると最初からコードがあるのでそれに追加していく形になります。
はじめにTableのセル(行)の数と セクション(セルのグループ)の数を設定します。
そのメソッドは
(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

 (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
です。
コードはこんな感じ


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // 戻り値にセクションの数を入力する。
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // 戻り値にセルの行数を入力する。
    return 10;
}


で次はCellの中身を埋める作業を行います。
メソッド
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
を書き換えます。

- (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の中身を代入します。
    cell.textLabel.text = [[NSString alloc]initWithFormat:@"Cell %d", indexPath.row];
    
    return cell;
}

実行すると


このように。
これだとすべてのセルに1つの文言しか入らないので、別々の文言を入れる方法を。
ヘッダーファイルに

NSMutableArray *men;

と書く。ソースファイルのviewDidLoadメソッドに

men = [NSMutableArray arrayWithObjects:@"ラーメン", @"そば", @"うどん", nil];

と書いてシンプルな配列を作成。
メソッド
(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)sectionの戻り値を

 return men.count;

と設定。
メソッド
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
のcell.textlabel.textを

//objectAtIndexは配列の(引数)番目を呼び出すメソッド。
//indexPath.rowは○番目のセルてな感じ
cell.textLabel.text = [men objectAtIndex:indexPath.row];

実行すると


こんなん。

0 件のコメント:

コメントを投稿