【发布时间】:2019-01-12 19:53:05
【问题描述】:
我有一个 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 和当前视图控制器,因为我在导航控制器中推送其他控制器并且如果发生这种情况不想做任何事情。
【问题讨论】:
-
我只是好奇:
navigationController.viewControllers.contains(viewControllerA) && navigationController.viewControllers.contains(viewControllerB)不会在这里工作吗? -
如果我们再推另一个视图控制器呢?你会接到同样的电话,并且条件会通过,但是这两个都不是刚刚被推动的。可以接受吗。这似乎有点脆弱。
-
这很好。如果确实通过了新控制器(我的应用程序现在不这样做,但将来可以),则条件将通过。我想知道是否有办法解决这个问题。
-
另外,
navigationController.viewControllers.contains(viewControllerA)也不起作用。导航控制器确实知道它包含self.sideMenuController。
标签: ios objective-c uinavigationcontroller delegates