不同的视图取决于iOS上的方向

时间:2013-02-05 09:07:56

标签: xcode cocoa-touch ios5

我之前已经问过这个问题,但是如何根据iOS 5中的界面方向支持不同的视图?

Apple的一个例子显示了一个PortraitViewController和一个LandscapeViewController。 PortraitViewController创建LandscapeViewController并注册自身以进行旋转通知。当它收到旋转通知时,它会根据当前界面方向推送或弹出LandscapeViewController。

到目前为止一切顺利。

但是如何保持两个控制器的数据同步? (它们显然显示相同的数据,因为它们在技术上与用户的控制器相同,只是在横向和纵向中具有不同的视图)。两者都有一个“重装数据按钮”,可以重新加载他们的数据。如何在LandscapeViewController重新加载时告诉PortraitViewController显示相同的数据,反之亦然?

另一个问题是内存警告。当界面处于横向模式并且我收到内存警告时,我的PortraitViewController被卸载。现在,如果我为LandscapeViewController重新加载数据,则PortraitViewController无法执行相同操作,因为它已卸载并且其Outlet仍设置为nil。

如何解决所有这些问题?

3 个答案:

答案 0 :(得分:1)

你实际上首先必须制作新的xib ......

转到文件 - 新文件 选择用户界面 选择视图 等等来制作新的XIB

现在选择新视图 转到右侧面板中的身份检查员 添加类名以将xib连接到旧的.h和.m文件

重要的一步......

将新的xib视图与文件所有者

连接

现在新的xib与oldviewcontroller .h和.m

连接

最后一步

在appdelegate中使用if语句来更改基于IOS的nibname

为此您可以使用此.. [[UIDevice currentDevice] systemVersion]

if语句中的

你必须用新视图更改initwithname ..

self.viewController = [[[ViewController alloc] initWithNibName:@“View”bundle:nil] autorelease

答案 1 :(得分:1)

所以我最终做的是使用一个带有2个视图的ViewController,根据界面方向显示不同的视图。这样做的缺点是我必须连接所有插座两次并操纵它们两次。

但是这样我可以轻松地共享我的数据并避免一个视图被卸载而另一个视图没有。

答案 2 :(得分:0)

您应该有一个新类来存储您的数据。两个viewController都将引用此dataController(或您想要的任何名称)。 您还可以在viewControllers的viewWillAppear和viewWillDisappear上添加一些逻辑。 最后,对于内存警告问题,您可以检查viewWillAppear是否已加载视图并相应地执行操作。