web-dev-qa-db-ja.com

ストーリーボードを介してロードされたビューはどのように初期化されますか?

ビューが手動でロードされると、開発者は初期化に関してコントロールを維持し、呼び出す初期化子、設定する変数などを選択します。

ビューがストーリーボードセグエから読み込まれると...その初期化子はどうなりますか?ビューがロードされたら、どこで変数を設定する必要がありますか?

ここでシーケンスを理解するのを手伝ってください。ここでクラスのインスタンスはどのように作成され、誰がそれを作成し、どのように介入し、好みに合わせて設定するのを助けることができますか?

59
JAM

ビューがペン先またはストーリーボードから読み込まれると、-initWithCoder:メソッドが呼び出されます。 -initWithFrame:と同様に、-initWithCoder:はUIViewの指定された初期化子です。 UIViewサブクラスのカスタム初期化を行う場合は、これらの両方のメソッドで確実に初期化する必要があります。一般的な手法の1つは、-initWithFrame:-initWithCoder:の両方から呼び出す共通の初期化メソッドを追加することです。 my answer to カスタムビューとinitメソッドの実装? を参照してください。

-initWithFrame:のドキュメントで説明していることに注意してください:

Interface Builderを使用してインターフェイスを設計する場合、このメソッドはビューオブジェクトがnibファイルからその後ロードされるときに呼び出されません。 nibファイル内のオブジェクトは再構成され、initWithCoder:メソッドを使用して初期化されます。このメソッドは、nibファイルに格納されている属性と一致するようにビューの属性を変更します。

92
Caleb