我正在构建一个应用程序,其中有3个ViewControllers。 我也创建了自定义导航控制器。
从第二个按钮开始,使用presentviewcontroller呈现C-ViewController。
现在按下B& C ViewControllers,我必须在B-ViewController&中使用pop视图控制器。在C-ViewController中解雇。
目前我知道这些页面,但应该有一个通用的解决方案。 有没有办法确定当前导航控制器是否被按下或弹出。
因为有些页面可以推送或呈现,但我不想设置任何bool变量。我需要使用苹果的支持。
NSArray *arrViewControllers = [[AppDelegate sharedInstance].navigationController viewControllers];
NSLog(@"[arrViewControllers count] = %d",[arrViewControllers count]);
我使用上面的代码来获取堆栈中的视图控制器列表。 但我无法确定它是否被推送或呈现。 有人可以帮助我吗?
答案 0 :(得分:2)
您可以检查导航视图控制器堆栈中是否存在视图控制器。只需将其检查为
即可if([self.navigationController topViewController] == self){
//VC is the top most view controller
[self.navigationController popViewControllerAnimated:YES];
}else{
//You can put some checks here to be dead sure its a modally presented view controller
[self dismissViewControllerAnimated:YES completion:nil];
}
答案 1 :(得分:1)
这是从前一个控制器显示或推送导航控制器的代码。
NSArray *arrViewControllers = [[AppDelegate sharedInstance].navigationController viewControllers];
UIViewController *viewController = [arrViewControllers lastObject];
if (viewController.presentedViewController)
{
[self dismissViewControllerAnimated:YES completion:nil];
}
else{
[self.navigationController popViewControllerAnimated:YES];
}