【问题标题】:Displaying 2 view controllers at once, with a single animation一次显示 2 个视图控制器,带有一个动画
【发布时间】:2015-03-12 13:50:16
【问题描述】:

例如,我有 baseVC、firstVC 和 secondVC。 BaseVC 是最初显示的唯一 VC,然后当用户按下 baseVC 中的按钮时,他们会看到出现 secondVC。当他们解雇 secondVC 时,他们会看到 firstVC。当他们关闭 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
}

这样做会给我一个错误:

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

而我看到的不是我的结果,而是简单的 firstVC 呈现。

我怎样才能做到这一点?

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

【问题讨论】:

  • 您是否尝试在第一个的完成处理程序中这样做?你喜欢那个动画吗?
  • 在那里执行意味着第一个出现,然后第二个动画或立即出现,这显然取决于动画设置。但是不,这不是我想要的结果。我想对用户隐藏 firstVC,直到他们关闭 secondVC。
  • 只需改变你的调用顺序,首先呈现 firstVC,然后在 firstVC 中呈现 secondVC
  • @luk2302 this 在 firstVC 中动画,然后立即显示 secondVC。

标签: ios swift uiviewcontroller uinavigationcontroller


【解决方案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

【讨论】:

  • 啊,这里的问题不仅仅是动画,还在于它现在给了我一系列推送的视图控制器,而那肯定不是我想要的。我需要它们是模态的。
【解决方案2】:

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

  1. 呈现 secondVC 动画
  2. 如果 secondVC 将被关闭,则改为显示 firstVC
  3. 要么从 viewController 堆栈中删除 secondVC,要么从 firstVC 中弹出两次(如果它会被解除)

由于目前我只能编写 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

【讨论】:

  • 我并不完全关注,但可以肯定的是,如果你愿意,Objective-C 绝对会受到赞赏。
  • 啊,这里的问题是我不想push和pop。我在导航控制器上以模态方式呈现。
  • 啊,你还没有提到它们应该是模态的^^。让我想想……
  • 再次更改它,实际上应该在 baseVC 上方呈现一个模态视图 - 稍后在 secondVC 上方呈现一个模态视图,然后关闭 secondVC,这应该会导致两个模态视图都被关闭
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 2011-01-26
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多