Popping& amp;通用方式关闭视图控制器

时间:2014-03-06 05:33:37

标签: ios iphone objective-c cocoa-touch uiviewcontroller

我正在构建一个应用程序,其中有3个ViewControllers。 我也创建了自定义导航控制器。

  1. A-ViewController - >这包含2个按钮,第一个按钮用于打开B-ViewController&第二个按钮用于C-ViewController。 从第一个按钮,我使用pushviewcontroller进行B-ViewController,意味着从A-ViewController推送B-ViewController。
  2. 从第二个按钮开始,使用presentviewcontroller呈现C-ViewController。

    现在按下B& C ViewControllers,我必须在B-ViewController&中使用pop视图控制器。在C-ViewController中解雇。

    目前我知道这些页面,但应该有一个通用的解决方案。 有没有办法确定当前导航控制器是否被按下或弹出。

    因为有些页面可以推送或呈现,但我不想设置任何bool变量。我需要使用苹果的支持。

    NSArray *arrViewControllers = [[AppDelegate sharedInstance].navigationController   viewControllers];
    NSLog(@"[arrViewControllers count] = %d",[arrViewControllers count]);
    

    我使用上面的代码来获取堆栈中的视图控制器列表。 但我无法确定它是否被推送或呈现。 有人可以帮助我吗?

2 个答案:

答案 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];
}