我有一些对象以圆圈形式相互链接。每个对象都包含对它的邻居的引用,square和triangle是不同的类类型:
两个类,三角形和正方形,使用ViewController可见,并且它们通过segues相互链接。
到目前为止,没问题。然而,当我在我的结构中浏览时,我不断地将ViewControllers添加到彼此之上。这不仅在内存方面看起来很糟糕,而且还存在这样的问题:当我想要退出这个结构时,我必须通过关闭我打开的所有ViewControllers来回溯。所以我正在寻找的是一种不在堆栈中当前on的基础上添加下一个ViewController的方法,而是将当前的ViewController替换为下一个。
我一直在寻找解决方案,但收效甚微。所以我觉得做我想要的事情要么是不可能的,要么我只是没有明显的观点而且不知道该寻找什么。我是否需要这样的RootViewController?或者我应该创建一个自定义segue,在添加新的ViewController之前解散旧的ViewController?我真的很茫然。
答案 0 :(得分:2)
在viewDidLoad中添加所有子视图一次,然后在你想要在viewController中显示该视图的地方为你所有的SubView提供标签,不要添加它只需通过调用函数[[self.view viewWithTag: 1] bringToFront]
答案 1 :(得分:1)
由于您可能正在使用navigationcontroller,因此您应该查看UINavigationController参考。有一些方法可以修改导航堆栈。您不能仅使用故事板来执行此操作。您需要一些自定义代码。
答案 2 :(得分:1)
您应该查看UINavigationController方法setViewControllers:animated:。
答案 3 :(得分:1)
听起来你想做几件事之一
rootViewController
rootViewController
充当单个UIViewController
的容器,并根据需要进行更改。在iOS 5中,您可以使用自定义UIViewController, but or you could use one which Apple provided.
UINavigationController执行此操作,但除非您还使用它来导航树状视图控制器的结构,否则它可能不是最佳选择。你最好的答案取决于你的需要。
如果您的控制器没有多少状态或者没有进行大量的交换,您可以使用选项1.
如果您希望用户经常快速地在控制器之间切换和/或您的控制器需要进行大量设置或具有大量状态,那么您可能需要NSArray
并且只需使用presentViewController:animated:completion:
来显示不同的需要时控制器。将您的控制器存储在NSArray
中有额外的好处,可以轻松识别他们的邻居。
答案 4 :(得分:1)
UINavigation controler的方法setViewControllers是一个选项。
另一种方法是使用popViewControllerAnimated弹出最多的视图控制器: 在某些情况下popToRootViewControllerAnimated:会是最好的甚至是popToViewController:animated:。不过,我个人并没有成功使用popToViewController:animated:但那可能是我当时的错。
是的,我认为您需要一个根视图控制器。我自己试图在前几天交换根视图控制器,但没有这样做。最后,它可能不是最优雅的解决方案,但我更容易实现一些虚拟的根视图控制器,它不会在后台显示我的应用程序徽标(与默认图像相同但移动到负坐标以匹配默认值启动时的图像。它位于导航栏和状态栏的“后面”。)。它可能会显示一些空的黑色背景。最终它很可能永远不可见。