在这一点上,我有一个相当简单的 iOS 5 应用程序。
UINavigationController 被设置为 Interface Builder 中的初始视图控制器(我们仍然称它为 Interface Builder 吗?无论如何...)。UINavigationController 有一个通用的 UITabBarController 作为它的 rootViewController。
我想将主 AppDelegate 用于 UINavigationController 和 UITabBarController 委托。我使 AppDelegate 符合 UINavigationControllerDelegate 和 UITabBarControllerDelegate。一切正常。但!
在 AppDelegate 的 application:didFinishLaunchingWithOptions: 中,我觉得我在做一些 hacky 的事情。为了设置每个控制器委托,我必须对 self.window.rootViewController 和 self.window.rootViewController.topViewController 进行类型转换。
UINavigationController *rootNavigationController = (UINavigationController *) self.window.rootViewController;
UITabBarController *rootTabBarController = (UITabBarController *) rootNavigationController.topViewController;
[rootNavigationController setDelegate:self];
[rootTabBarController setDelegate:self];
如果我不输入 self.window.rootViewController 我不能设置它的委托。topViewController (UITabBarController) 也一样。
如果我在 Inferface Builder 中声明初始视图是 UINavigationController,而不是一些通用的 UIViewController,为什么我还必须对所有内容进行类型转换?这是哈克吗?