IBのtabBar viewControllers:カスタムinitを送信しますか?
-
03-07-2019 - |
質問
tabBarControllerベースのアプリにはいくつかのタブがあります。それぞれにカスタムviewControllerクラスがあり、唯一の違いはインスタンスの初期化方法です。インターフェースビルダーに異なるタブのカスタム初期化パラメーターを送信させる方法はありますか?
現在、viewWillAppearで初期化を行っていますが、多くの理由から、コードではなくIBで初期化するのが理にかなっています。
提案はありますか
ありがとう、 ケルソ
解決
Interface Builderは、プログラムの実行時にアーカイブされないオブジェクトのアーカイブを作成します。 IBに特定のメソッドを呼び出すように指示することはできません。
viewWillAppear:
が呼び出される前に初期化する必要がある場合、 awakeFromNib
で初期化できます。これは、すべてのオブジェクトとすべてのアウトレットが読み込まれた後に呼び出されることが保証されていますターゲットに接続されています。
初期化をさらに早くしたい場合は、 initWithCoder:
をオーバーライドして初期化できます(ドキュメントについては NSCoding
プロトコルを参照してください)。どこに文書化されているかはわかりませんが、それはアーカイブからデコードされるオブジェクトに対して指定された初期化です。
上記のすべてで、パラメーターを受け取ることはできませんが、コードでは、グローバル変数を慎重に使用することで必要なものにアクセスできるはずです。 [[UIApplication sharedApplication] delegate]
を使用して、アプリケーションのデリゲートオブジェクトにアクセスすることもできます。
他のヒント
nibがロードされたときにIBランタイムによって呼び出されるメソッドを変更する方法はないと思います。達成しようとしていることを説明した場合(つまり、viewDidAppearでセットアップを実行してもうまくいかない理由)、初期化を処理するためのより良い方法の提案が表示される場合があります。