我有一个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.
        }
    }


委托解决方案有效,但不确定是否是最佳实践。我检查viewControllerAviewControllerB是否不是nil和当前视图控制器,因为我在导航控制器中推送了其他控制器,并且在发生这种情况时不希望做任何事情。

最佳答案

假设根视图控制器始终总是首先加载,则可以使用非根视图控制器的viewDidLoad方法执行工作,可以通过引用设备类型来确定该方法。

10-08 07:25
查看更多