アプリがルート ビュー コントローラーに戻ると、viewDidAppear:
メソッド内ですべてのサブビューを削除する必要があります。
これどうやってするの?
ベストアンサー1
編集:感謝を込めてココアファンNSView
: この状況は、と がUIView
異なる処理を行っているために混乱を招きます。 NSView
(デスクトップ Mac 開発のみ) の場合は、次のように簡単に使用できます。
[someNSView setSubviews:[NSArray array]];
(iOS 開発のみ)の場合、プロパティはサブビューの配列のコピーを返すためUIView
、安全に使用できます。makeObjectsPerformSelector:
subviews
[[someUIView subviews]
makeObjectsPerformSelector:@selector(removeFromSuperview)];
ありがとうございましたトミーmakeObjectsPerformSelector:
は、列挙中に配列を変更するように見えることを指摘していただきありがとうございますsubviews
( の場合は変更しますNSView
が、 の場合は変更しませんUIView
)。
参照してくださいこのSOの質問詳細については。
注:これらの2つの方法のいずれかを使用すると、メインビューに含まれるすべてのビューが削除され、他の場所に保持されていない場合は解放されます。Appleのドキュメントからスーパービューから削除:
レシーバーのスーパービューが nil でない場合、このメソッドはレシーバーを解放します。ビューを再利用する予定がある場合は、このメソッドを呼び出す前に必ずビューを保持し、使用が終わったときや別のビュー階層に追加した後は、適切に解放するようにしてください。