*

UITableViewのセクションヘッダをStoryboardで作る時の参考

公開日: : 最終更新日:2014/03/16 Tips , ,

UITableViewのセクションヘッダをカスタムして作る際に、セルと同様にプロトタイピングするための記事。
UITableViewCell.contentViewはUIViewなんだから、それを使えばいいという趣旨。

(1)Storyboardで通常のセルと同様にセルを作る。[Style]はCustom、識別用の[Identifier]も入れる。
通常のヘッダ同様に背景色を透過させたい場合はViewのbackgroundColorは透明色(アルファを0)に指定する。

(2)ヘッダービュー(またはフッタービュー)を返すUITableViewDataSourceデリゲートのメソッド
-(UIView*)tableView:(UITableView)tableView viewForHeaderInSection:(NSInteger)section;
-(UIView*)tableView:(UITableView)tableView viewForFooterInSection:(NSInteger)section;
を実装するときに、(1)で作ったセルを
[tableView dequeueReusableCellWithIdentifier:]
で呼び出す(IndexPathの指定が不要な方を使う)。

(3)手順(2)で呼び出したセル(UITableViewCell)のcontentViewが、storyboardで設定した(セル扱いの)viewの本体なので、適宜セクション情報に合わせて内容を設定するなどして、contentViewをreturnしてやる。

contentViewの下にあるコンポーネントの特定は、storyboard上でコンポーネントにtagを設定してviewWithTagメソッドで呼び出すのが楽。
ただ、tagの数値で呼び出すのはぱっと見で分からないし、定数宣言するのはそれはそれで面倒という話であれば、別の手段を取る事もできる。

(1)UITableViewCell派生クラスを1つ作る。これをmyTableViewCellとする。
(2)myTableViewCellにIBOutletのプロパティを用意する。
(3)UIをIBで作りたい場合、Emptyのxibを用意してFile’sOwnerをmyTableViewCellにし、UITableViewCell(下の画像のアイコンのコンポーネント)を置く。
File’sOwnerのviewにこのTableViewCellを接続。他のIBOutletも配置して接続(下の画像のアイコン)。
c16974d1915e54342b6d685507c9c8a5

(4)使いたいUITableViewのあるViewControllerの適当な所(viewDidLoadとか)で、対象のtableViewに対して登録を行う。

UINib *nib = [UINib nibWithNibName:@“[手順(3)で作ったxibファイルのファイル名]" bundle:nil];
[tableView registerNib:nib forCellReuseIdentifier:@“[適当な識別名]"]

あとはStoryboardで通常のセルと同様にセルを作ったのと同様にdequeueReusableCellWithIdentifierで呼び出せる。
この場合、呼び出したセルは(myTableViewCell*)でキャストしてやれば、プロパティにもアクセスできる。

これらのセクションヘッダ/フッタにボタンなどを配置した時など、タップされたsectionのボタンが呼ばれたのかの区別をつけたい場合があるが、
その場合はreturnするViewそのものにsectionがわかるようにtagをつけるとよい。sender.superview.tagでアクセスできる。

UITableViewCellになってるが、このクラスはUIView派生クラスなので、そのままreturnしても全然問題ない。ここらへんが目鱗だった。
※追記:実際はContentViewを返したほうが背景色透過ができてよい
Cellに乗っけたヘッダ/フッタのコンポーネントにアクセスする場合は、それらのコンポーネントにTagを付けておき、[cell viewWithTag:]メソッドを使ってアクセスすることができる。
ヘッダ/フッタのビュー自体にタグを仕込んで、ヘッダ上のコンポーネントから参照したい場合はcell.ContentViewに対してTagを設定する。
(ヘッダ/フッタ上のボタンを押された時に、superViewのTagを見てセクションを把握するとかいう小技が使える)。

参照サイト:
stackoverflow

関連記事

アプリ内で自動スリープの設定を無効化する

「設定」アプリ内で設定したスリープ時間設定を無効にするためのコード。 アプリがバックグラウンドにな

記事を読む

UIAutomation関連覚書

割りと忘れがちなので、自分用備忘録を兼ねて、UIAutomationに関連するtips的なものをまと

記事を読む

UISplitViewControllerの仕切り線の色を設定

UISplitViewControllerで、iPadを横向き(Landscape)にしたときの2つ

記事を読む

iOS7の青色

iOS7の標準UIで使われている、水色に近い青の色についての記事です。 あの色には特に名前を決まっ

記事を読む

UIButtonのappearanceで派生する色設定

以下のコードでUIButtonのappearanceでBackgroundColorの設定をすると、

記事を読む

”No Scheme”になってしまった場合の対応

知人がXcodeで突然「No Scheme」表示になってRunするターゲットとデバイスが選択できない

記事を読む

FormSheetでModalに表示させたビューの高さを変更する

iPadにおいて、FormSheetでModal表示させたビューの高さを変えたい場合の記事。 この

記事を読む

Xcode5.1のInterfaceBuilderにおける地味な変更点

iOS7.1に合わせてXcode5.1がリリースされました Xcode Release N

記事を読む

plistファイルに色を入れる

plistファイル中にUIColorを入れたい!という場合。普通RGBAの値を数値で入れるとかするけ

記事を読む

UIActionSheetの文字がブレて多重表示される

UIActionsheetを使っていて、iOS7/iPadの組み合わせで起こる不具合らしき挙動が起こ

記事を読む

Xcode10からのimage literal / color literalの指定方法

アセットにあるUIImageの直接指定が可能なImage litera

Xcode11でのバージョン番号の取得方法

Xcode11になってバージョン番号をスクリプトから得て自動で更新する

GoogleスプレッドシートからCSVにエクスポートしたデータを得る方法

情報がない中さんざ苦労しましたが、Googleスプレッドシート(の最初

画面回転をしたあとに、UITextViewの先頭を表示する

回転によりサイズが可変するUITextViewで、縦向き(ポートレイト

NXDrawKitを導入してみる

ACEDrawingViewがObj-Cで書かれていて、いまいちメンテ

→もっと見る

    PAGE TOP ↑