*

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

関連記事

Size ClassとUIViewController.view

タイトルの件でちょっとハマったことがある上に、特に日本語情報もStackOverflowからも情報が

記事を読む

UIAutomation関連覚書

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

記事を読む

User Defined Runtime Attributeについての覚書

UILabelに上下左右のパディングをつける方法を探して、結局「自分で以下のようなメソッドを持った拡

記事を読む

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

iOS7のUItableViewCellだと、UITableView.imageViewに画

記事を読む

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

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

記事を読む

実機テストしたときのデータを取り出す

Xcodeでコンパイルして実機テストしている場合に、テストデータを実機から取り出す方法です。 以下

記事を読む

CALayerの管理

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

記事を読む

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

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

記事を読む

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

アセットにあるUIImageの直接指定が可能なImage literalですが、気がついたらアセット

記事を読む

iOS7でのPopover内サイズの指定

UIPopover内で表示する場合のViewControllerのコンテンツサイズ設定に関してのメモ

記事を読む

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

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

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

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

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

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

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

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

NXDrawKitを導入してみる

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

→もっと見る

    PAGE TOP ↑