我实现了一个定制的UIViewController
,它具有多个子视图控制器(主要是使用故事板的Container View
,但不仅仅是)。将消息发送给多个子视图控制器的最佳方式
我想知道什么是“根”视图控制器向其子发送消息的最佳方式,考虑到发送消息所关注的子视图控制器不一定“根”视图控制器的直接孩子?
例如:
我想从#0
发送消息,以查看控制器#1
和#4
。天真的实现是迭代的#0
孩子送进来的消息,像这样:
for (UIViewController *childVC in self.childViewControllers)
{
if ([childVC respondsToSelector:@selector(myMessage:)])
{
[childVC [email protected](myMessage:)];
}
}
但它根本不起作用,因为#3
将收到消息(或者可能不是,如果它是一个UINavigationController
我正在调用一个自定义方法),并且不会将它传播给它的子项(这里是#4
)。
因此是否有可能向其子女发送消息,并让消息通过UIViewController
层次结构传播?
如果没有,一个替代方案是使用NSNotificationCenter
,使感兴趣的消息(#1
和#4
)观察用于通知在孩子,并使根视图控制器交的通知,如果必要。但是我发现仅仅向两个孩子发送消息就有点矫枉过正。
首先,如果方法接受一个参数,并且你没有一个参数,那就是UB。 – 2013-03-07 19:08:45
我不认为这是矫枉过正 - 使用NSNotificationCenter。 – 2013-03-07 19:09:16
经典NSNotificationCenter – rocky 2013-03-07 19:10:12