UIViewController
複数の子ビューコントローラーを持つカスタムを実装しました(主にストーリーボードを使用しContainer View
ますが、それだけではありません)。
送信されたメッセージに関係する子のViewControllerが必ずしも直接の子であるとは限らないことを考慮して、「root」ビューコントローラがその子にメッセージを送信するための最良の方法は何でしょうか。 「ルート」ビューコントローラ?
例えば:
#0
ビューコントローラ#1
とにメッセージを送信したい#4
。ナイーブな実装は#0
、次のように、の子を反復処理してメッセージを送信することです。
for (UIViewController *childVC in self.childViewControllers)
{
if ([childVC respondsToSelector:@selector(myMessage:)])
{
[childVC performSelector@selector(myMessage:)];
}
}
ただし、メッセージを受信し(または、カスタムメソッドを呼び出している#3
場合はおそらく受信せず)、その子に伝播しないため、単純に機能しません(ここ)。UINavigationController
#4
それで、自分の子供にメッセージを送信し、そのメッセージを階層全体に伝播させる可能性はありますか?UIViewController
そうでない場合は、を使用してNSNotificationCenter
、メッセージに関心のある子(#1
および#4
)に通知を監視させ、必要に応じてルートビューコントローラーに通知を投稿させることもできます。しかし、2人の子供にメッセージを送るだけでは少しやり過ぎだと思います。