*

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

関連記事

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

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

記事を読む

UIButtonのLocalizeに関するTips

Storyboardに設置したUIButtonのタイトルのLocalizeをしてたのですが、英語では

記事を読む

UICollectionViewが画面回転した時にレイアウトが崩れた時の対応

UICollectionViewCellのサイズを、内容に合わせて動的に変えた時に起こる問題に関して

記事を読む

UIActionSheetが消えるときにキーボード表示/非表示通知が来る

 UITextViewやUITextField編集中にアクションシートを表示すると、アクションシート

記事を読む

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

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

記事を読む

HTMLParserを修正する

HTMLスクレイピングしてる時に役立つライブラリであるObjective-C-HMTL-Parser

記事を読む

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

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

記事を読む

UIAutomation関連覚書

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

記事を読む

ENMLからHTMLへの変換

最近EvernoteAPIをいじっているので、コレに関するノウハウをとりあえず断片的に引っかかったと

記事を読む

UILabelの改行をInterfaceBuilderから入力する

UILabelの行数は任意に設定できて、「0」を指定すると行数を限定しないで(UILabelのbou

記事を読む

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

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

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

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

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

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

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

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

NXDrawKitを導入してみる

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

→もっと見る

    PAGE TOP ↑