使用单个动画一次显示2个视图控制器

时间:2015-03-12 13:50:17

标签: ios swift uiviewcontroller uinavigationcontroller

例如,我有baseVC,firstVC和secondVC。 BaseVC是最初显示的唯一VC,然后当用户按下baseVC中的按钮时,他们会看到第二个VC呈现。当他们解雇第二个VC时,他们会看到第一个VC。当他们解雇firstVC时,他们会再次看到baseVC。

换句话说,我想一次呈现两个视图控制器,一个在另一个之上。我希望它像显示单个视图控制器一样动画。

这似乎是最初明显的解决方案:

//Presents secondVC over firstVC, currently off-screen.
firstVC.presentViewController(secondVC, animated: false, completion: nil)

//Presenting firstVC brings firstVC and secondVC onscreen.
baseVC.presentViewController(firstVC, animated: true) {
    () -> Void in
}

这样做会给我一个错误:

  

警告:尝试出示谁的   视图不在窗口层次结构中!

而我所看到的而不是我的结果只是第一次呈现。

我怎样才能做到这一点?

编辑:这些应该以模态显示。

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作,而不是同时显示两个视图控制器:

var vcs = self.navigationController.viewControllers.mutableCopy();
vcs.addObject(firstVc);
vcs.addObject(secondVc);

self.navigationController.setViewControllers(vcs, animated:false);

抱歉,如果语法错误。我仍然在Objective-C

中编码

然后给它像这样的模态效果: Showing pushviewcontroller animation look like presentModalViewController

答案 1 :(得分:-1)

您可以通过以下方式尝试:

  1. 目前secondVC动画
  2. 如果secondVC被解雇,则首先出现#VC
  3. 从viewController堆栈中删除secondVC或者从firstVC中弹出两次(如果它将被解除)
  4. 由于我现在只能编写Objective-c代码,我无法为这种情况提供快速代码。

    一般注意事项:尝试在navigationControllers中使用push ...和pop ...而不是present ...

    // in your baseVC
    - (void)pushButton:(id)sender {
      [self presentViewController:secondVC animated:true completion:nil];
    }
    
    // in your secondVC
    - (void)backButtonAction:(id)sender {
      [self presentViewController:firstVC animated:true completion:nil];
    }
    
    // in your firstVC
    - (void)backButtonAction:(id)sender { 
      [baseVC dismissViewControllerAnimated:true completion:nil];
    }
    

    关于如何知道backButton事件,请查看Trying to handle "back" navigation button action in iOS