【发布时间】:2013-01-20 03:39:21
【问题描述】:
我知道之前有人问过这个问题,但是如何根据我在 iOS 5 中的界面方向支持不同的视图?
Apple 的一个示例显示了 PortraitViewController 和 LandscapeViewController。 PortraitViewController 创建 LandscapeViewController 并为旋转通知注册自己。当它收到旋转通知时,它会根据当前界面方向推送或弹出 LandscapeViewController。
到目前为止一切顺利。
但是我怎样才能保持两个控制器同步的数据呢? (它们显然显示相同的数据,因为它们在技术上对用户来说是相同的控制器,只是在横向和纵向视图中具有不同的视图)。两者都有一个“重新加载数据按钮”,可以重新加载他们的数据。如何让 PortraitViewController 在 LandscapeViewController 重新加载时显示相同的数据,反之亦然?
另一个问题是内存警告。当界面处于横向模式并且我收到内存警告我的 PortraitViewController 被卸载时。现在,如果我为 LandscapeViewController 重新加载数据,PortraitViewController 将无法执行相同的操作,因为它已卸载并且其 Outlets 仍设置为 nil。
如何解决所有这些问题?
【问题讨论】:
-
为什么要使用两个视图控制器?你能不能使用 1 个视图控制器,其中有两个视图 - 一个是为纵向创建的,一个是为横向创建的。然后只需检查加载时的设备方向并显示相关视图。然后在
willRotateToInterfaceOrientation中执行相同的操作来切换哪个视图可见? -
那么我必须将两个视图之间共享的所有视图连接两次。
-
您是指通过 segue 从纵向/横向视图呈现的与其他视图控制器的连接吗?如果是这样,您可以将它们连接到视图控制器并通过调用
[self performSegueWithIdentifier:@"name" sender:self];来触发它们 -
我的意思是横向和纵向都出现的标签等。但我想这只是一个小烦恼。
-
我只是在想什么最适合性能和内存问题。如果视图相对简单(但不一定),您总是可以考虑一个视图,并根据方向调整每个标签、图像等的框架。
标签: xcode cocoa-touch ios5