1

blueViewビューコントローラがと呼ばれ、別のコントローラがと呼ばれると想像してくださいgreenViewgreenView.view次に、のサブビューとして追加しblueView.viewます。ここで、ユーザーとの対話の後、次の使用を削除greenView.viewしたいとします。blueView.view

[self.view removeFromSuperview]

ここで実際に何が起こっているのですか?blueView.view再描画されたことはありますか?viewDidLoadメソッドが呼び出される可能性があると思いましたが、NSLogメッセージを入力したviewDidLoad後、サブビューを削除した後に呼び出されることはありませんでした。スーパービューからサブビューを削除したときに実際に何が起こっているのかを明確にしていただければ幸いです。

4

1 に答える 1

4

まず、ビューコントローラは、ビュー階層全体を一度に管理することを目的としています。2つのビューコントローラ(UINavigationControllerなどのコンテナコントローラを除く)を同時にアクティブにしないでください。この重要な点をよりよく理解するには、このSOの質問と私の回答を参照してください。したがって、あなたが説明する特定の状況は出てはいけません。(余談ですが、ビューとビューコントローラを混同することがよくあるため、ビューコントローラに「blueView」のように「-view」で終わる名前を付けることは役に立ちません。混乱を避けるために「blueViewController」と呼んでください。)

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

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

于 2011-07-28T18:45:22.563 に答える