我想检查当前所在的视图控制器是根视图控制器还是被推到某个导航控制器上。
我想检查当前所在的视图控制器是根视图控制器还是被推到某个导航控制器上。
[self.navigationController viewControllers];
将返回一个包含堆栈上所有视图控制器的数组。只需比较此数组中的第一个元素,以查看控制器是否是根控制器。
例如:
UIViewController *vc = [[self.navigationController viewControllers] firstObject];
if([vc isEqual: <viewController to check> ])
{
// code here
}
编辑:添加了Swift
let vc = self.navigationController?.viewControllers.first
if vc == self.navigationController?.visibleViewController {
//Code Here
}
if([self.navigationController.viewControllers count] == 1) {
//Current view controller is root controller
}
在您当前的视图控制器的viewDidLoad中,只需检查self.navigationController.viewControllers.count == 1
,意味着您当前位于导航堆栈的根视图。确保您没有呈现视图控制器。
if(self.navigationController.viewControllers.count == 1)
{
//do what you want
}
关于@Simon的回答,我补充一下我的答案。如果你使用了一些抽屉式菜单,这可能会帮助你找到确切的根视图控制器。
- (BOOL) checkImRoot:(id)controller {
if(self.window.rootViewController) {
if(self.window.rootViewController == (UIViewController *)controller) {
return YES;
}
}
return NO;
}
if([[AppDelegate shareDelegate] checkImRoot:self]) {
//Yeah, I'm a root vc
}else{
//Noo, I'm a child vc
}
self.window.rootViewController
吗?!这是一个错误吗? - mfaaninil
。为什么要多一行?! - mfaanirootViewController
为空,我们的比较可能会导致代码崩溃。 - HemangrootViewController
是可选的... - mfaani
self.navigationController.viewControllers
,它会给你一个推入的导航视图控制器数组。 - ChintaN -Maddy- Ramaniself.navigationController.topViewController == self
来检查它是否是rootViewController
。 - gabbler