我为长标题道歉,但它确实是我能想到的最短的准确和描述性的版本。
我正在使用自定义 segue 类型实现自定义容器视图控制器,使用 iOS 5 和故事板。我还为包含的视图控制器提供了一个委托协议,旨在像 UINavigationControllerDelegate 一样工作。目前,我正在从我的自定义容器发送一个委托消息,通知 segued-from 子视图控制器与我的自定义 segue 相关的条件,它需要知道以执行某个操作。
这对于我自己的 UIViewController 子类来说非常简单,我可以指定它以符合 .h 文件中的协议。
但是,当我的自定义容器的包含的视图控制器本身是内置容器(例如 UINavigationController、UITabBarController)时,我发送的委托消息对于包含的容器不一定有意义,但对于活动的子视图会有意义该容器当前显示的控制器。内置容器显然会将通常的view(Will|Did)(Disa|A)ppear
呼叫转发给他们的孩子,但我没有看到将这种转发扩展到我的自定义消息的通用方法。
快速而肮脏的解决方案是对该内置容器进行子类化并为其添加委托消息转发。例如,MyTabBarController
将符合委托协议并将委托消息转发到其selectedViewController
. 另一种方法是让我的自定义容器主动嗅探它包含的视图控制器是否是其自身类型的容器,但这更加肮脏并且无法解释将来可能有一天嵌套在我的自定义容器中的容器类型。
整个自定义包含安排非常特定于我当前的应用程序,所以我可以破解它,因为我知道要求是什么,我不需要使它通用,但我肯定想在这个领域遵循良好的设计实践以防万一我需要通过未来应用程序中的潜在重用使其在未来更加通用。
那么,除了我已经描述的两种解决方案之外,还有什么建议吗?