2012年8月15日水曜日

xibファイルとは

InterfaceBuilderで作成するxibファイルとは、単純にレイアウトを記述するものではなくて、「オブジェクトの配置」と「イベントハンドルのデリゲート」を記述するものである。

オブジェクトの配置とは、UI部品など可視オブジェクトの表示座標だけではなく、例えばテーブルビューと、そこに表示するデータソースとなるオブジェクトとを関連付けることも指す。

そしてObjective-Cの柔軟なデリゲーション機能によって、外部コントローラオブジェクトに、UI部品のイベントハンドルを委譲する。ボタンは純粋にボタンとしての機能だけを持ち、実際にユーザーがボタンを押したことで何が起きるかは、xibがロードされた時に、すなわちボタンアクションがコントローラオブジェクトのデリゲートメソッドに接続されたときに決定される。

----

この仕組みはOSX上で動いていたころを考えるととても美しいと思うんだけど、iOS上ではあまり良い仕組みじゃない気がする。

OSXは複数ウインドウを展開しやすいOSだから、一つのxibを一つのコントローラが管理するプログラムは自然なんだけど、iOSは一つのウインドウしか存在しないから、複数の画面部品(xib)を扱いたいと考えたとき、一つの画面にいくつものコントローラが混在し結合して一つの画面を構成することになり、それらをプログラム上で生存管理しなければならなくなる。

----

…と、ここまで書いて閃いたんだけど。

画面を構成するビューコントローラを一つだけ生成し、複数のxibのFile's Ownerにそのビューコントローラを指定してデリゲーションメソッドを実装、最初のコンポーネントのみawakeFromNibで生成し、その後はloadNibNamedで呼び出してOwnerを関連付けさせれば、不要なビューコントローラーの生成を回避できる気がする。

----

[XCODE] Nibファイルを複数使って一つの画面を作成する

同じことを考えている人がいた。

0 件のコメント:

コメントを投稿