为什么我的导航控制器现在是以模态方式进行转换而不是推送?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我的导航控制器现在是以模态方式进行转换而不是推送?相关的知识,希望对你有一定的参考价值。

我想寻求一些问题的帮助,但我显然不明白,因为我只是初学者,所以如果可以的话,请帮助我。

这是我的问题,到目前为止,我通过storyboard建立了所有的视图,所有的视图都由导航控制器使用storyboard中设置的 "push "segue来显示,到目前为止,一切都按预期工作。

在某些时候,我决定在主视图控制器的下半部分添加日历视图,以便在用户按下按钮时显示出来。根据网上找到的一些建议,我决定将其添加为一个子视图控制器(并以编程方式完成)。

下面是我用来显示视图的代码。

addChild(calendarVC)
view.addSubview(calendarVC.view)
calendarVC.didMove(toParent: self)

这里是我用来取消视图的代码。

willMove(toParent: nil)
removeFromParent()

到目前为止,一切都很好,但这里有一个问题:

在触发removeFromParent()部分后,每个其他视图控制器之间的过渡从push变成了modal。我不知道,而且我的知识水平太低,无法自己解决,在这里搜索类似的主题也没有得到任何我可以理解的答案,所以希望有人能在这里为我的问题提供帮助。

谢谢大家

答案

确保你调用 willMove(toParent: nil) removeFromParent() 从子视图控制器中调用上述函数。

从父视图调用上述函数将从导航层次结构中移除控制器。

以上是关于为什么我的导航控制器现在是以模态方式进行转换而不是推送?的主要内容,如果未能解决你的问题,请参考以下文章

通过应用程序的故事板保持导航控制器

以编程方式创建带有后退按钮的导航控制器

如何检查视图控制器是不是以模态方式呈现或推送到导航堆栈上?

在导航堆栈中以模态方式呈现视图控制器

如何使用自定义 UIViewController 转换来实现这一点?

如何将 segue 标识符添加到以编程方式进行的模态转换?