【问题标题】:How can I have alternate nib files for a given ViewController and change them on the fly?如何为给定的 ViewController 提供备用 nib 文件并即时更改它们?
【发布时间】:2009-11-25 01:03:58
【问题描述】:

我有一个 ViewController,它控制在横向模式下需要与纵向模式不同的布局的视图。我制作了两个语义相同但布局不同的 .xib 文件。我知道在横向模式下以模态方式显示第二个 ViewController 是一种技巧,但我真的宁愿在切换方向时用另一个 nib 文件重新初始化视图控制器。

我已经完成了一半。当我在查看有问题的(标签栏)视图时转动设备时,它会消失(页面,而不是设备!)。但是当我切换到另一个选项卡并返回到有问题的视图时,它会按我想要的方式显示。

如何在查看要重新布局的视图时切换笔尖,而不让它消失?

现在我正在 -didRotateFromInterfaceOrientation: 和 -viewDidAppear:。我设置 self.view = nil 并调用 initWithNibName:bundle:。这可以以合理的方式工作还是我必须求助于模态黑客。

【问题讨论】:

    标签: objective-c iphone cocoa-touch uiviewcontroller


    【解决方案1】:

    不要忘记视图可以有子视图,您可以随意隐藏或显示。在您的情况下,我会将两个方向的布局放在同一个笔尖中,并在您收到 -didRotate.. 消息时切换它们。

    【讨论】:

    • 好的,很好的解决方案!另外,实施大约需要 5 分钟。我并不热衷于将所有这些东西都放在一个 NIB 中,但它比其他替代品看起来要简单得多。
    • 它非常适合显示事物,但我不太确定是否将所有 UI 元素连接到视图控制器,每个视图中都有重复项(纵向和横向)一)。
    【解决方案2】:

    不。不支持,我想 Apple 已经说过它可能会在未来出现,但现在要使用自动调整大小的蒙版和布局信息。

    另外:你不能自己调用​​ nil,然后继续运行你的控制器的代码,因为它结束了。

    【讨论】:

    • 谢谢。视图控制器并没有将自己设置为 nil,而是将其视图设置为 nil,这就是其中似乎具有正确效果的一部分。另外,我需要一个自动调整掩码无法做到的布局,所以如果这不起作用,我只需要显示一个模态视图控制器。
    • 嗯...是的,听起来像另一个单独但连接的视图可以解决问题。如果有帮助,现在有一种方法可以在横向模式下呈现模态视图。
    【解决方案3】:

    这是我发现的第一件事(缺少已知的模态显示技巧):由于所有这些都发生在标签栏控制器内,您只需获取标签栏控制器的 viewControllers 属性的可变副本,用从 NIB 初始化的新视图控制器替换该数组中所需的视图控制器,然后将修改后的数组的不可变副本放回选项卡栏控制器的 viewControllers 属性。它显示正确并保留所有笔尖连接。缓存备用视图控制器的副本应该很容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      相关资源
      最近更新 更多