【问题标题】:Different views depending on orientation on iOS不同的视图取决于 iOS 上的方向
【发布时间】: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


【解决方案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] 自动释放

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-03
        • 2014-08-27
        • 2019-03-20
        • 1970-01-01
        • 1970-01-01
        • 2016-08-31
        • 2012-02-12
        相关资源
        最近更新 更多