主要问题是:如果我们在Storyboard中有多个NavigationControllers并希望从一个到另一个,会发生什么? (这可以通过我们在常见的VC之间使用segue来实现,我是对的吗?)
据我所知,NavigationController代表了一堆VIEwControllers,我们可以在其中d出并推送这些VC.那么现在我们将第一个NavigationController的VC的“位置”从第二个改为VC,接下来会发生什么?第一个堆栈消失了,现在我们只在第二个堆栈内工作了?如果是这样,是否意味着第一个NavigationController的VC堆栈是否已从内存中删除?
也许我完全误解了某些东西或者可能不是:).我很乐意看到您的回复,并希望向您询问有关导航机制的更多详细问题.
UPDATE
关键在于:假设我们有一个(初始)VC,其中两个按钮代表应用程序的两个独立部分.接下来我们点击第一个按钮然后转到一个NC的RootVC,而不是我们回到初始VC按下第二个按钮然后转到另一个NC.当我们回到最初的VC时,第一个NC堆栈发生了什么?最初的方法是将NC“转移到初始VC”?
UPDATE
我试图了解内存会发生什么,以及当前场景中哪些VC等等.如果我们在场景中有一些额外的VC,也许它绝对不重要,也许我们确实需要它们更快地在NC(或只是VC)之间切换.所以我想了解它是如何运作的.
解决方法 想象一下,您拥有标准的应用程序链,您可以在初始导航控制器中推送/d出视图.然后,假设您有不同的视图,而不是该链的一部分,如用户配置文件,您将其显示为模态视图:现在顶部导航控制器是初始的,所以你从这里开始,而为了使用第二个,你必须通过UIStoryboard这样访问它(红色箭头):
// Get storyboardlet storyboard = UIStoryboard(name: name,bundle: NSBundle.mainBundle())// Get profile NClet profileNC = storyboard.instantiateVIEwControllerWithIDentifIEr("LoginNC") as! UINavigationController
但是如果你真的想要从应用程序的某个部分呈现配置文件,那么它不是模态的,你也可以这样做(绿色箭头).唯一的区别是,现在您不需要第二个导航控制器 – 所以您不要将push segue连接到红色NC,而是直接登录视图控制器.如果您实际尝试连接NC-NC然后运行它,您将获得运行时异常,说您做错了.
记忆
无论你如何呈现它们,所有VC都会留在内存中.当您将某些内容呈现为模态时,这也适用于背景视图.如果由于长链而导致内存问题,则可以在控制器中实现清理/缓存逻辑:
func vIEwWillAppear(animated: Bool) { // Call super first super.vIEwWillAppear(animated) // Prepare UI}func vIEwWilldisappear(animated: Bool) { // Call super first super.vIEwWillAppear(animated) // do some memory cleanup,since vIEw will not be visible atm}
希望能帮助到你!
总结以上是内存溢出为你收集整理的ios – 多个NavigationControllers之间的导航全部内容,希望文章能够帮你解决ios – 多个NavigationControllers之间的导航所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)