2013年1月14日月曜日

iOS: UITableViewCellの作り方で参考にしたサイト

僕はとにかくUITableViewに関しては、色々と使い方を忘れる。
その度に検索して調べているのです。

今回は、UITableViewに置くUITableViewCellをカスタマイズしようとしたら、どうやって作るのかすっかり忘れていました。


参考にしたサイトの記事がこちら。

空のxibの作り方

ふむふむ、まず空のxibファイルにUITableViewCellを置いて、その中にいろいろパーツを配置していけばいいのか。

ん? 空のxibってどうやって作るんだっけ?

そうそう、これこれ。

makexib.png

なるほどね〜。

先の記事を参考にして、うっかりやっちゃうミスとしては、Cellに配置したパーツの接続先(Outlet)を、File's Ownerにしてしまう事でしょうか。僕はうっかりやりました。
しっかりカスタムUITableViewCellに接続してやりましょう。

outlet.png

UITableViewCellのインスタンス化

最新のやり方だと、UINibを使ってUITableViewCellをインスタンス化した方がいいみたいですね。

インスタンス化する方法は、先のサイト記事の方法でもいいけど、iOS 5以降ならもっと便利なメソッドがあるみたいです。
こちらの記事を参考にしました。

[tableView registerNib:[UINib nibWithNibName:@"MyCell" bundle:nil] forCellReuseIdentifier:@"MyCell"];
上記のような感じで、最初にUITableViewに、カスタムUITableViewCellを登録しておくと、

MyCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"];
とやるだけで、再利用できるCellを探して、無かった場合は、新規にインスタンス化するのをやってくれます。

なので、今までのように返り値をnilチェックする必要なし、自前でインスタンス化コードを書く必要もなしです。
もっと早く欲しかったですね。

Cellの再描画

時々、Cellの中身を更新したので再描画させたい時があります。
これのやり方は、以下の記事が参考になりました。

Cellに対してsetNeedsLayoutを送ればいいと。
表示中のCell全てだったら、以下のコードでうまくいけました。
[tableView reloadData]するよりもコスパ良さそうです。
NSArray *cells = [tableView visibleCells];
for (MyCell *cell in cells) {
  // 何か変更する
       :
  [cell setNeedsLayout];
}

関連記事

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...