我有一个iOS应用程序,可以显示多个屏幕,并且对于iPhone和iPad具有不同的根控制器。这是一个简化的示例代码,以显示正在发生的事情。
if (iPad) {
self.sideMenuController = [LGSideMenuController sideMenuControllerWithRootViewController:viewControllerA
leftViewController:viewControllerB
rightViewController:nil];
} else {
self.sideMenuController = [LGSideMenuController sideMenuControllerWithRootViewController:viewControllerB
leftViewController:viewControllerA
rightViewController:nil];
}
[self.navigationController pushViewController:self.sideMenuController animated:NO];
我需要知道两个控制器(ViewControllerA和ViewControllerB)何时加载。
我已经实现了以下代表
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if (self.viewControllerA.viewIfLoaded.window != nil && self.viewControllerB.viewIfLoaded.window != nil) {
// do stuff after both controllers have been loaded and it is current view.
}
}
委托解决方案有效,但不确定是否是最佳实践。我检查viewControllerA
和viewControllerB
是否不是nil和当前的视图控制器,因为我将其他控制器推入了导航控制器,并且在发生这种情况时不想做任何事情。
答案 0 :(得分:1)
似乎很脆弱。您正在做很多假设,而不是(据我所知)向导航控制器询问您真正想知道答案的问题。这个问题是(据我所知):
答案 1 :(得分:0)
您可以拥有两个viewController都继承自的一些BaseClass(ViewControllerA和ViewControllerB),并且在该BaseClass中,您可以使用doc_root
方法来运行所需的任何代码。
答案 2 :(得分:0)
假设始终先加载根视图控制器,则可以使用非根视图控制器的viewDidLoad
方法执行工作,该方法可以通过引用设备类型来确定。