2012/05/05更新

[XCODE] UITableViewCellをカスタマイズする方法

このエントリーをはてなブックマークに追加      

今日もiPhone開発ネタです(*゚▽゚)ノ
UITableViewを使う機会は多いかと思いますが、 そこに表示するセルにはいくつかのパターンが存在します。
しかしそのパターンに縛られず自由に、レイアウトを設定したい場合には、セルの作成が必要となります。
今日は、レイアウトを自由に作成出来るUITableViewCellの作り方を記載したいと思います。

Customize UITableViewCell Image



UITableViewCellのレイアウトを自由に作成する

そのためには、UITableViewCellのレイアウトを定義するXibファイル(Nibファイル)を用意します。
そのXibファイルを読み込み、UITableViewCellのインスタンスを作成する流れとなります。
Xibファイルを読み込む方法は、Nibファイルを複数使って一つの画面を作成する@YoheiM.NETも参考にしてみて下さい。
例えばこんな感じで用意します。

UITableViewCellのカスタマイズNibファイル

ここでのポイントを列挙します。
  • File's Ownerに自作したCellのインスタンスを保持するクラスを指定する
  • Cell上に配置する要素それぞれに、tag番号を指定する

tag番号を付ける理由は、後ほどプログラムからラベルに値を設定する際に、 ラベルを特定する為に使います。


続いて、上記で作成したXibファイルを読み込み、TableVlewCellを作成し、 値を設定する箇所です。
以下のようなソースコードで実現出来ます。今回は、UITableViewDataSourceDelegateで セルを返却するメソッドでの例を示します。
- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
       
  // キャッシュからCellインスタンスを取得する事を試みる
  static NSString *identifier = @"CustomTableCellView";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

  // キャッシュから取得出来なかった場合には、
  // Xibファイル(Nibファイル)から読み込んで、UITableViewCellのインスタンスを作成する
  // 今回の場合、XibファイルのOwnerは、TableCellViewControllerという自作クラスであり、
  // TablecellViewControllerクラスのtvCellフィールドに、Xibファイル読み込み時に、
  // Xibファイルで定義した自作のUITableViewCellが設定されるようにしている。
  if (cell == nil) {
    TableCellViewController *tvCellViewController = [[TableCellViewController alloc] init];
    [[NSBundle mainBundle] loadNibNamed:@"TableCellView" owner:tvCellViewController options:nil];
    cell = tvCellViewController.tvCell;
  }

  // tagを指定して、Xibファイルで作成したUITableViewCell上に配置した
  // UILabelにアクセスし、そこに値を設定する。
  UILabel *label;
  label = (UILabel *)[cell viewWithTag:1];
  label.text = @"tag1のラベルを設定してみた";
 
  label = (UILabel *)[cell viewWithTag:2];
  label.text = @"tag2のラベルに値を設定した";
 
  label = (UILabel *)[cell viewWithTag:3];
  label.text = @"tag3のラベルに値を設定した";

  return cell;
}

ここが肝となります。loadNibNamed:owner:options:関数で、XibファイルからUITableViewCellの インスタンスを作成し、その後tagを用いてラベルを特定して値を設定しています。




最後に

UITableViewCellは色々なレイアウトが用意されていますが、文字のサイズを変えたいとか、 文字の配置を変えたいなどの要望があると、自作する道も考える必要がありそうです。
また、iPhone開発ネタでこんなTips的なものを書けたら良いな。
最後までお読み頂きましてありがとうございました。






こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。