0

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

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

到现在为止还挺好。

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

另一个问题是内存警告。当界面处于横向模式并且我收到内存警告我的 PortraitViewController 被卸载时。现在,如果我为 LandscapeViewController 重新加载数据,PortraitViewController 就不能做同样的事情,因为它被卸载并且它的 Outlets 仍然设置为 nil。

我该如何解决所有这些问题?

4

3 回答 3

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] 自动释放

于 2013-02-05T10:01:01.603 回答
1

所以我最终做的是使用一个 ViewController 和 2 个视图,根据界面方向显示不同的视图。这样做的缺点是我必须将所有插座连接两次并对其进行两次操作。

但是通过这种方式,我可以轻松地共享我的数据并避免一个视图被卸载而另一个视图不被卸载。

于 2013-02-07T08:01:50.963 回答
0

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

于 2013-02-05T10:18:01.677 回答