我有一个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和当前视图控制器,因为我在导航控制器中推送了其他控制器,并且在发生这种情况时不希望做任何事情。 最佳答案
假设根视图控制器始终总是首先加载,则可以使用非根视图控制器的viewDidLoad
方法执行工作,可以通过引用设备类型来确定该方法。