切换到新的 UIViewControllers 时如何从层次结构中删除 UIViewControllers?
Posted
技术标签:
【中文标题】切换到新的 UIViewControllers 时如何从层次结构中删除 UIViewControllers?【英文标题】:How to remove UIViewControllers from hierarchy when segueing to new UIViewControllers? 【发布时间】:2016-01-14 14:46:45 【问题描述】:我正在开发一个应用程序,就视图的发展方式而言,它并不是完全“连续”的。
例如,我可以进入以下场景,我会继续使用新视图:
MatchesNavigationController -> ModalOptionsController -> ProfileViewController -> ModalOptionsController -> MatchesNavigationController -> MatchesNavigationController...
等等等等。
在英语中,正在发生的事情是用户正在查看他们匹配的人并在与用户的文本消息中,然后他们单击工具栏中的模式选项按钮,它会弹出一些选项,然后用户想查看他们的个人资料。然后从个人资料中,他们可以单击一个按钮以弹出相同的模式,然后可以从那里转到与该人的对话,这将再次返回到他们正在查看对话的导航控制器。然后他们可以从那里再次单击选项,转到配置文件,然后重复...
但是,如果我在 ProfileViewController
上,我可以按“返回”,这将通过我编写的自定义 RightToLeft segue 将“返回”到 MatchesNavigationController
。
所以我可以进入 ViewController 堆栈在这个实例中开始变得越来越大的实例。
当我也这样做时(进入这个循环的工作流程),我写了一个自定义的 LeftToRight segue,因为我希望它看起来像,对用户来说,他们正在朝那个方向导航。
在这种循环类型的导航中,我如何清理以前的视图,您可以在此处进入?
【问题讨论】:
【参考方案1】:在prepareForSegue:
中调用self.navigationController.popViewControllerAnimated(true)
在segueing 之前,它将在推送下一个视图控制器之前从堆栈中释放当前视图控制器。
【讨论】:
但是浏览量不是UINavigationControllers
。它们只是普通的UIViewControllers
,没有navigationController
,UIViewController
类上也没有popViewController
。
好的,试试self.dismissViewControllerAnimated(self:completion:)
但要确保它在下一个出现之后。
A better option for you would be to use a navigation controller for viewcontroller pushing and popping. And just hide the navigation bar using navigationController.navigationBarHidden = true
我尝试了self.dismissViewControllerAnimated
调用,但它不起作用,它仍然存在于视图层次结构中。如果一切都失败了,我可能只需要使用导航控制器并按照您所说的去做,但是我试图避免重写大量代码。我认为会有一种从层次结构中删除视图控制器的基本方法,但似乎并非如此。我正在玩我写的自定义segue,看看我是否可以在那里完成,但昨晚我没有任何运气。【参考方案2】:
在进行了更多的搜索和挖掘之后,我意识到我试图做的事情比其他任何事情都更 hacky,我花了整个周末重构我的视图的布局和呈现方式,并将所有内容都放在了 UINavigationController
和只是推送/弹出所有应该做的事情,所以我将把它作为公认的答案,因为这确实是我从一开始就应该做的事情。
【讨论】:
以上是关于切换到新的 UIViewControllers 时如何从层次结构中删除 UIViewControllers?的主要内容,如果未能解决你的问题,请参考以下文章
切换到新的 ViewController 后,搜索栏不会消失