2012-02-19 44 views
0

我已阅读了很多有关此问题的问题,但仍无法找到解决此问题的适当解决方案。我有一个新闻应用程序,在启动画面上启动(要获取新闻提要并缓存它们),然后切换到主屏幕,这是新闻文章的混搭。你可以通过点击文章,部分,画廊,视频等从这个屏幕导航到许多其他屏幕......我有一个固定的页眉和页脚,我决定继承一个主UIViewController并将它们放在那里(我'在我的其他UIViewControllers中继承这个UIViewController)切换UIViewControlles - Ambigious

我读过,最好的方法是让多个视图控制器控制我的应用程序的特定部分。不过,我仍然对如何正确和负责任地进行切换感到困惑。我试过故事板塞格斯,但我遇到了两个问题:

  1. 我需要创建很多塞格斯的,因为你几乎可以从 任何屏幕跳转到任何其他屏幕
  2. 的塞格斯将不保留的状态一旦你跳到另一个UIViewController,一旦你回去它被重置为它的初始状态 。

我也读过关于当前的视图控制器,你可以将你的视图作为当前控制器上的模态。然而,你需要做很多事情,而且我对内存消耗问题有点害怕。如何创建一个多视图应用程序没有应用程序视图hiearchy(UINavigationController/UITabController/etc ...)通常我想声明所有我的视图控制器在开始时,只是在它们之间切换为需要(当我第一次需要一个视图,我会初始化)任何人尝试过类似的东西之前?

非常感谢。

编辑:谢谢你的回复,我出去看了关于UIViewController遏制的WwDC会议,并帮助我了解如何实现自定义UIViewController容器。然而,仍然有一些我无法理解的东西。

当我创建一个自定义的UIViewController容器时,我需要使用addChildViewController为其添加子项,并且会在我的子UIViewController上触发willMoveToParentController事件。

然后我使用[self.view addSubview ...]将子控制器子视图添加到容器视图中,但是这只会加载视图并且不会将它们链接到我在子UIViewController内创建的事件。

我应该用addSubview以外的东西吗?或者我应该使用单独的UIView类来连接我的事件?

+0

请检查我对这个问题的回答http://stackoverflow.com/questions/9318232/ ..它可能会帮助你。 – 2012-02-19 12:19:38

+0

谢谢Malek,在这种情况下如何处理过渡? – ravenstone 2012-02-19 12:26:57

+0

例如..'UIViewController * vc = [appDelegate.controllersArr objectAtIndex:0] vc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;' – 2012-02-19 12:45:04

回答

0

如果您使用新的iOS 5,我建议您阅读实施容器视图控制器部分UIViewController Class Reference

以这种方式,您可以创建一种容器控制器来管理您的其他视图控制器。关键方面是你可以实现你自己的控制器和切换动画。

此模式可应用于故事板和非故事板应用程序。我更喜欢第二种方法。

关于内存消耗,如果您以正确方式管理内容,则不必担心。也许,如果您已经缓存了数据,则可以从视图分层结构中添加或删除当前显示的控制器的view(但将控制器作为主控制器的子组件)或删除这两者。

希望它有帮助。

+0

我在观看有关视图遏制和层次结构的WWDC 2011会话后创建了自定义UIViewController容器。非常感谢。 – ravenstone 2012-03-04 19:17:45

+0

不客气。 – 2012-03-04 22:54:07