2012年11月7日水曜日

User Defined Runtime Attributes

InterfaceBuilderで各要素に対して存在するこの設定項目。

「ユーザー定義の実行時属性」とかいうと分かりにくいけど、やってることは単に実行時にキー値コーディングを用いてプロパティに値を設定するだけ。

これを使用することで見た目に関わるプロパティの設定を、viewDidLoadからxibに移す事ができる。「ビューとロジックを分離させたい」という用途にうってつけのように思える。

しかしインテリセンスみたいな補完は一切仕事しないし、スペルミスってたりプロパティ自体存在してなかったりしたら、実行時にUndefined Keyで落ちる。

 しかも設定できる要素にかなり制限があって、

  • 整数は指定できるけど、小数は指定できない。
  • UIColorは指定できるけど、CGColorは指定できない。

これらの制約によってlayer.cornerRadiusを操作するという用途には向かないし、layer.borderColorは設定できない。角丸にしたり影付けたりみたいなのは、viewDidLoadでやるしかない。ギリギリ使えるのは、UITableViewの背景を透過させるのにbackgroundViewにnilを代入したりとか…。

謎なのが「Localized String」の設定項目の存在で、これを使えばコード上でLocalizedStringsを用いて文字列を書き換えているコードを一掃できるように見える。しかしiOSでもOSXでも機能しないし、調べても「使えない」「ドキュメントもない」という報告ばかり。仮に使えたとしてもgenstringで検出できないので、利用価値はゼロだろう。

「iOS5 プログラミングブック」ではこの属性の存在について触れているんだけど、実際に使った上で書いてるんだろうか?

また「User Defined Runtime Attributes」で設定したプロパティは、実行時にキー値コーディングで設定されるだけなので、当然Interface Builder上に反映されるわけもなく、設定できる内容も中途半端なことからIB上とコード上に処理が分散して、かえって分かりにくくなる可能性の方が高いので、多人数プロジェクトには向かない。

0 件のコメント:

コメントを投稿