iOS 检查 ViewController 实例是不是打开并切换 ViewControllers
Posted
技术标签:
【中文标题】iOS 检查 ViewController 实例是不是打开并切换 ViewControllers【英文标题】:iOS check if ViewController instance is open and switch ViewControllersiOS 检查 ViewController 实例是否打开并切换 ViewControllers 【发布时间】:2014-02-01 22:39:20 【问题描述】:我有一个带有嵌入式 NavigationController 的基本 ViewController 来提供工具栏。 ToolBar 有三个按钮,用于通过 segue 调用 ViewController 来呈现数据。
逐位显示和关闭每个数据 ViewController 没有问题,但我想在所有三个数据之间切换呈现 ViewControllers 但不关闭和重新打开 ViewControllers 多次。
-
如何在 VC1 - 3 之间切换时保持 ViewController 1 - 3 打开?
我如何知道呈现 ViewController (VC1 - 3) 的数据是否已打开?
当 VC1、VC2 或 VC3 被关闭以返回基本 ViewController 时,如何关闭所有打开的 ViewController (VC1 - 3)?
基础 ViewController 是 TabBarController 的一部分。所以,我不想为 VC1 - 3 创建另一个。我的目标是使用按钮在 VC1、2 和 3 之间切换,但我不知道如何开始。我试图找到打开的 ViewController 使用:
ViewController1 *presenter = [(UITabBarController *)self.presentingViewController viewControllers][0];
但它只是告诉我 NavigationController 是呈现的 ViewController。但是没有办法要求由 NavigationController 打开的 ViewController。有什么想法吗?
谢谢!
【问题讨论】:
【参考方案1】:好吧,我想我终于明白你在做什么了。您有一个带有工具栏的基本视图控制器。单击工具栏上的三个按钮中的任何一个将显示三个视图控制器之一。这些视图控制器还显示一个工具栏,允许您在这三个视图控制器之间切换,但您希望这些视图控制器在用户在它们之间切换时保持不变。当用户完成后,他们可以单击导航栏上的后退按钮来弹出所有这些视图控制器并返回到基本视图控制器。对吗?
子视图控制器是否需要使用工具栏而不是UITabBarController
? UITabBarController
将为您维护对所有三个视图控制器的引用,您不必在它们之间进行切换。例如,基本视图控制器仍然可以有三个按钮,并且这些按钮将pushViewController:animated:
一个带有三个视图控制器的新UITabBarController
,并且它还会根据按下哪个按钮来选择选定的视图控制器。这可能会让你的事情变得更容易。
我建议这样做的原因是,我认为尝试使用导航控制器在这三个 VC 之间进行分隔并不是导航控制器的正确用法。像这样的 Segue 旨在传达这些 VC 之间的等级关系,但它们看起来像是兄弟姐妹,而不是彼此的孩子。
【讨论】:
您好理查德,感谢您的回答。我想我必须再次重新思考我的概念。我绝对不想使用另一个 TabBarController。我可能会尝试使用更多的授权。还是谢谢。 啊,我错过了基本 VC 使用标签栏控制器。还有一条评论:当您以模态方式呈现 VC 时,它会沿着 VC 层次结构向上移动以确定哪个视图控制器是呈现器,这就是为什么您的导航控制器作为您的子 VC 的呈现视图控制器返回的原因。您可以使用definesPresentationContext:
更改此行为。
您好 Richard,感谢您提供使用“definesPresentationContext”的提示。这可能有助于我检查已经打开的视图控制器。以上是关于iOS 检查 ViewController 实例是不是打开并切换 ViewControllers的主要内容,如果未能解决你的问题,请参考以下文章
iOS:如何检查一个变量是不是在 dispatch_async 的另一个 ViewController 中改变了他的值?