【问题标题】:Switching UIViewControlles - Ambigious切换 UIViewController - 模棱两可
【发布时间】:2012-02-19 12:10:33
【问题描述】:

我已经阅读了很多关于这个问题的问题,但我仍然找不到解决这个问题的合适方法。我有一个在启动画面上启动的新闻应用程序(获取新闻提要并缓存它们),然后它切换到主屏幕,这是新闻文章的混搭。您可以通过单击文章、部分、画廊、视频等从该屏幕导航到许多其他屏幕......我有一个固定的页眉和页脚,我决定将主 UIViewController 子类化并将它们放在上面(我会在我的其他 UIViewControllers 中继承这个 UIViewController)

我了解到,最好的方法是让多个视图控制器分别控制我的应用程序的特定部分。但是,我仍然对如何正确和负责任地在这些之间进行切换感到有些困惑。我尝试了故事板转场,但遇到了两个问题:

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

我还阅读了有关 presentModalViewController 的信息,您可以使用它将视图作为模式推送到当前控制器之上。但是,您需要经常这样做,而且我有点担心内存消耗问题。

在没有应用程序视图层次结构的情况下创建多视图应用程序的最佳方法是什么(UINavigationController/UITabController/etc...) 通常我想在开始时声明我的所有视图控制器,然后根据需要在它们之间切换(当我第一次需要一个视图时,我会对其进行初始化)有人尝试过类似的东西吗?

非常感谢。

编辑:感谢您的回复,我出去观看了有关 UIViewController 遏制的 WwDC 会议,这有助于我了解如何实现自定义 UIViewController 容器。但是还是有一些我无法理解的东西。

当我创建一个自定义 UIViewController 容器时,我需要使用 addChildViewController 向它添加子容器,这将在我的子 UIViewController 上触发 willMoveToParentController 事件。

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

我应该使用 addSubview 以外的其他东西吗?还是应该使用单独的 UIView 类来连接我的事件?

【问题讨论】:

  • 请查看我对这个问题的回答stackoverflow.com/questions/9318232 .. 它可能对您有所帮助。
  • 谢谢Malek,在这种情况下我该如何处理过渡?
  • 例如..UIViewController *vc = [appDelegate.controllersArr objectAtIndex:0] vc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

标签: objective-c ios uiviewcontroller


【解决方案1】:

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

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

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

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

希望对你有帮助。

【讨论】:

  • 在观看了 WWDC 2011 关于视图包含和层次结构的会议后,我创建了一个自定义 UIViewController 容器。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 2014-08-12
  • 2011-04-20
  • 2011-09-07
  • 2011-01-09
相关资源
最近更新 更多