*

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

関連記事

ENMLからHTMLへの変換

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

記事を読む

UISegmentedControlに見栄え良く背景色を設定する

UISegmentedControlをiOS7で使おうとすると、基本の背景色が「透明」になりますが、

記事を読む

iOS8のシミュレーターでLocalizationのテストをする

iOS8.1のシミュレーターでは、従前できていたシミュレーター内での「設定」(Setting)からの

記事を読む

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

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

記事を読む

バージョンアップ版があることを通知する

拍子抜けするほど簡単だったので、「アプリのバージョンアップの通知をどうするか」という話についてTip

記事を読む

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

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

記事を読む

iPadのUIModalPresentationFormSheetでキーボードが閉じない

iPadでUIModalPresentationFormSheet(全画面ではなく、中央にフロートし

記事を読む

UITableViewのセルセパレータが画像の下部分だけ切れる場合の対応

iOS7のUItableViewCellだと、UITableView.imageViewに画

記事を読む

CALayerの管理

CALayerはNSKeyValueCodingを実装している(Core Animation Ext

記事を読む

viewDidLoadとviewDidLayoutSubviewsのタイミング

真実の記事にある「コードでiPhone6を識別する」話とほんのちょっとだけ繋がっている話で、view

記事を読む

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

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

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

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

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

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

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

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

NXDrawKitを導入してみる

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

→もっと見る

    PAGE TOP ↑