2011-07-28 13 views
1

blueViewという名前のビューコントローラと、greenViewという名前のビューコントローラがあるとします。私はblueView.viewのサブビューとしてgreenView.viewを追加します。現在、いくつかのユーザーとの対話の後、私が使用してblueView.viewからgreenView.viewを削除したいと仮定:ここで実際に何が起こっているスーパービューからビューを削除するときに呼び出されるものはありますか?

[self.view removeFromSuperview] 

blueView.viewはこれまでに再描画されていますか?私はviewDidLoadメソッドが呼び出されるかもしれないと思ったが、NSLogメッセージをviewDidLoadに入れた後、サブビューを削除した後では決して呼び出されなかった。スーパービューからサブビューを削除したときに実際に何が起こっているかを明確にすることは、非常に高く評価されます。

+1

viewDidLoadは、UIViewメソッドではなく、UIViewControllerメソッドです。 – InsertWittyName

答えて

4

まず、ビューコントローラは、ビュー階層全体を一度に管理することを目的としています。同時にアクティブな2つのビューコントローラ(UINavigationControllerのようなコンテナコントローラ以外)を使用するべきではありません。この重要な点についてよりよく理解するには、this SO question and my answerを参照してください。だから、あなたが描く特定の状況は起こらないはずです。 (別名:人々はしばしばビューとコントローラーを混乱させるので、 "blueView"のように "view"で終わるビューコントローラーの名前を与えることは役に立ちません)。

第2に、 @InsertWittyNameが指摘するように、-viewDidLoadはUIViewメソッドではなく、UIViewControllerメソッドです。これをさらに進めると、View Controllerも-viewDidLoadも、ビューからサブビューを追加または削除する役割はありません。 -viewDidLoadは、ビューコントローラのビューが最初に作成されたときに呼び出されます。これは基本的に、ビューの階層が作成されるまで、ビューコントローラの初期化のビュー関連の部分を延期するだけの方法なので、サブビューが階層から削除されたために再度呼び出される理由はありません。

最後に、ビューがスーパービューから削除される方法は、実際の実装の詳細です。スーパービューのプライベートUIViewメソッドを呼び出すか、スーパービューのサブビューのリストを直接変更するなどの方法があります。私は、ドキュメント内で、サブビューが削除された後にスーパービューが再描画されることを明示する何も表示しませんが、私の経験上、スーパービューは実際にそれ自身を再描画します。これは、スーパービューの-drawRectメソッドにブレークポイントを設定することで確認できます。

+0

私はあなたが私よりも多くを知っていると信じています。自分の答えを削除することができれば、あなたは受け入れることができます。 +1 – Peres

+0

詳細および完全な説明ありがとうございました:) – hemlocker

関連する問題