正しい方法は、サブコントローラがメインコントローラにそれを削除するように依頼することです。あなたは二つのコントローラ間の結合を低減したい場合は、あなたのサブコントローラのためのデリゲートプロトコルを作成します。
// This forward declaration avoids having a circular dependency
// between MySubcontroller and MySubcontrollerDelegate
@class MySubcontroller;
@protocol MySubcontrollerDelegate
- (void)hideMySubcontroller:(MySubcontroller*)subcontroller;
@end
をサブコントローラがsupercontrollerに通信するために必要なその他の情報があれば、これは、関連する追加するには絶好の場所でありますコール。すぐに行う必要はないかもしれませんが、あなたのアプリの将来のバージョンでは注意してください。
は、次にサブコントローラにdelegate
プロパティを追加します。その代わり、そのビューにremoveFromSuperview
を呼び出すので
@interface MySubcontroller : UIViewController {
id <MySubcontrollerDelegate> delegate;
...
}
@property (assign) id <MySubcontrollerDelegate> delegate;
...
@end
、サブコントローラは、引数としてself
を渡し、そのデリゲートにhideMySubcontroller:
を呼び出す必要があります。
あなたのメインコントローラが、それはデリゲートプロトコルを実装することを宣言する必要があります。
@interface MyMainController : UIViewController <MySubcontrollerDelegate>
...
@end
メインコントローラは、サブコントローラを作成すると、それはself
にサブコントローラのdelegate
プロパティを設定する必要があります。サブコントローラのビューを削除し、サブコントローラの割り当てを解除し、必要なものを実行するhideMySubcontroller:
メソッドを実装する必要があります。
デリゲートプロトコルを使用することは、サブコントローラがどの種類のオブジェクトを使用するかを知る必要がないことを意味します。そのようなオブジェクトがどこかにあることを知っているだけで、デリゲートプロトコルに準拠します。したがって、2つのコントローラ間の結合は可能な限り小さく保たれる。
ところで、もしあなたがそれを管理できるなら、それをもう一度使用する必要がある場合に備えて、サブコントローラーを周りに置いておくのが実際的です。それはそれを再作成するのにかかる処理時間を節約するでしょう。 (ただし、メモリの警告が表示された場合は、リリースする必要があります)