その度に検索して調べているのです。
今回は、UITableViewに置くUITableViewCellをカスタマイズしようとしたら、どうやって作るのかすっかり忘れていました。
参考にしたサイトの記事がこちら。
空のxibの作り方
ふむふむ、まず空のxibファイルにUITableViewCellを置いて、その中にいろいろパーツを配置していけばいいのか。ん? 空のxibってどうやって作るんだっけ?
そうそう、これこれ。
なるほどね〜。
先の記事を参考にして、うっかりやっちゃうミスとしては、Cellに配置したパーツの接続先(Outlet)を、File's Ownerにしてしまう事でしょうか。僕はうっかりやりました。
しっかりカスタムUITableViewCellに接続してやりましょう。
UITableViewCellのインスタンス化
最新のやり方だと、UINibを使ってUITableViewCellをインスタンス化した方がいいみたいですね。インスタンス化する方法は、先のサイト記事の方法でもいいけど、iOS 5以降ならもっと便利なメソッドがあるみたいです。
こちらの記事を参考にしました。
- ios - How to use UINib to instantiate and use custom UITableViewCells - Stack Overflow
- Speeding up table view cell loading with UINib - Use Your Loaf
[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 件のコメント:
コメントを投稿