Master-Detail にはいつも悩まされるね。

Master-Detail のテンプレートを使ってアプリを作っていると、デフォルトのテンプレートの出来栄えのよさに感心してしまう。素晴らしいなと。splitView や navigationController の対応など、これを素で作ろうとしたら、困難を究めることは間違いない、ってか、以前、小さく初めて大きく育てる式でやってみたらまじキツかった・・・

そんな素晴らしいテンプレートも、アプリ制作を進めて、さあ、カスタムしようかなと思ったらハマる。

まず、Master のレイアウト調整部分。Prototype Cells というところがあるから、ここをいじろうとしたらなんかいつもと調子が違う訳だ。UILabel を自由に配置できなかったりする。これが嫌で、一覧表示の部分だけ別に xib ファイルを作ったりして今までは対応していたんだけど、いつもこれでは進歩がないと思い、今回は Prototype Cells をいじることで対応してみようと思ったのが運の尽き、すごいハマった。今回は堪えてやり方がわかった。まず、storyboard で Table View > Cell のところを選び、property の Table View Cell, Style を確認。デフォは Basic とかになってる。UILabel を自由に配置できないのはこれが原因で、Custom に変更すると、割と自由にレイアウトをいじれるようになる。cell の背の高さなども変更可能。

次に、Class のところに名前をつけて、ファイルを起こす。TableViewCell の sub class ファイルを生成。作成したファイルに配置した object を紐付けして、property として登録する。

レイアウト側の処理はこれでよし。次に、プログラム側の対応。

MasterViewController.h に、先ほど作成した TableViewCell の sub class ファイルを incude する。次に、テンプレートで記載がある次の method を変更。

- (void)configureCell:(UITableViewCell *)cell withEvent:(Event *)event

変更するのは、まず、第一引数の型。UITableViewCell になっているので、先ほど作成した sub class を指定。こうすることで、property として登録したラベルを指定できるようになる。

大体これがカスタムの全容。

さて、xib 別ファイルに起こすのと、今回のように Prototype Cells をいじるのとどちらがよいのか・・・うーん、今にしては Prototype Cells の方が、手間が少ないし別ファイルを起こさなくていよいのでいいかも。手順を知ってればスラスラなんだけど、わかってないと時間がかかるね。

ちなみに、CoreData で relation していて、master の 1 record に N の record がいくつ関連づけられているかを知るには、例えば、relation の名前が toLaps だとすると、event.toLaps で配列になってて、[event.toLaps count] とすれば N の record 数を確認できる。要は、N は relation の名前が付いた配列に入っているということなんだけど、これを知らないとハマる。自分としては知らなくてすごいはまったんだけど、あまりこの点について言及している記事がないので、後学のため書きました。