如何检查导航控制器是否被按下或是否为根视图控制器?

Bhu*_*ani 14 push objective-c navigationcontroller ios

我想检查我所在的视图控制器是否是根视图控制器或是否在某个导航控制器上推送.

Sim*_*lin 14

[self.navigationController viewControllers];

将返回堆栈中所有viewControllers的数组.只需比较此数组中的第一个元素,即查看控制器是否为根.

例如

UIViewController *vc = [[self.navigationController viewControllers] firstObject];

if([vc isEqual: <viewController to check> ])
{
    // code here
}
Run Code Online (Sandbox Code Playgroud)

编辑:添加Swift

let vc = self.navigationController?.viewControllers.first
if vc == self.navigationController?.visibleViewController {
    //Code Here
}
Run Code Online (Sandbox Code Playgroud)


Gan*_*alf 9

无论何时通过导航控制器推送任何视图控制器,它都会在堆栈上管理这些视图控制器,并以后进先出的方式进行维护.因此,如果您当前的视图控制器是根控制器,那么堆栈中只能有一个对象.您可以通过此代码检查该堆栈

if([self.navigationController.viewControllers count] == 1)  {  
   //Current view controller is root controller  
}
Run Code Online (Sandbox Code Playgroud)