我对长标题表示歉意,但这确实是我能想到的最短、准确和描述性的版本。
我正在实现一个具有自定义 Segue 类型的自定义容器 View Controller ,使用 iOS 5 和 Storyboard。我还为包含的 View Controller 提供了一个委托(delegate)协议(protocol),其工作方式与 UINavigationControllerDelegate 非常相似。目前,我正在从自定义容器发送一条委托(delegate)消息,该消息通知隔 ionic View Controller 与我的自定义 Segue 相关的条件,它需要了解该条件才能执行特定操作。
使用我自己的 UIViewController 子类就足够简单了,我可以指定它以符合 .h 文件中的协议(protocol)。
但是,当我的自定义容器包含的 View Controller 本身是内置容器(例如 UINavigationController、UITabBarController)时,我发送的委托(delegate)消息对于该包含的容器不一定有意义,但对于该容器当前显示的事件 subview Controller 。内置容器显然将通常的 view(Will|Did)(Disa|A)ppear
调用转发给它们的子项,但我没有看到将该转发扩展到我的自定义消息的通用方法.
快速而肮脏的解决方案是对该内置容器进行子类化并向其添加委托(delegate)消息转发。例如,MyTabBarController
将遵守委托(delegate)协议(protocol)并将委托(delegate)消息转发到其 selectedViewController
。另一种方法是让我的自定义容器主动嗅探它包含的 View Controller 是否是其本身类型的容器,但这甚至更脏,并且无法考虑将来有一天可能嵌套在我的自定义容器中的容器类型。
这整个自定义遏制安排非常适合我当前的应用程序,因此我可以破解它,因为我知道要求是什么,并且我不需要将其设为通用,但我确信希望遵循该领域的良好设计实践,以防万一我需要通过在未来应用程序中的潜在重用来使其更加通用。
那么,除了我已经描述的两个解决方案之外,还有什么建议吗?
最佳答案
我会使用正式的协议(protocol),当 parent 想要与 child 沟通时,只需询问它是否符合协议(protocol)即可。与类别类似,但您不必每次调用类别方法时都询问 e 实例。只需询问它是否响应协议(protocol)一次,然后您就可以调用您想要的任何协议(protocol)方法。
参见 NSObject 的 -conformsToProtocol:
。
关于ios - 将消息从自定义容器 View Controller 传递到包含的容器 View Controller 的子级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12579291/