【问题标题】:How to make 1 IBOutlet works for different devices?如何使 1 个 IBOutlet 适用于不同的设备?
【发布时间】:2018-10-30 03:35:00
【问题描述】:

假设我有一个通用的 iPhone 尺寸和 iPad 尺寸来解决。

iPad 有一个UIButton 链接到UIViewController 作为IBOutlet。 而 iPhone 不需要这个 UIButton 但因为 iPhone 和 iPad 都在 1 Storyboard 和任何其他 IBOutlet 是相同的。处理这个问题最合适的方法是什么?

我的想法是使@IBOutlet weak var button:UIButton? 可选,并且只有iPad 的按钮链接到它。但是我在代码中做的每一个动作都需要button?.xxxxx

有什么建议吗?

【问题讨论】:

  • 你应该可以使用 Trait Variations

标签: ios swift autolayout storyboard xib


【解决方案1】:

不要根据设备更改布局。 Apple 现在开始使用尺寸等级来描述他们的设备。目前,iPad 在全屏时都有一个“Regular”的水平尺寸类别和一个“Regular”的垂直尺寸类别(在 iPad 上进行多任务处理时会有所不同)。

选择您的按钮并转到属性检查器。向下滚动,你会发现这个“Installed”属性:

点击“+”号,这应该会出现:

为“宽度”和“高度”选择“常规”。现在您应该看到两个“已安装”属性 - 一个用于 wRhR,一个用于其他所有属性。只需取消选中其他所有选项,即可仅在 iPad 上使用该按钮。

现在您需要小心代码。因为您的按钮可以是电话上的nil。记得做 nil 检查!

【讨论】:

  • 所以需要@IBOutlet weak var button:UIButton? 而不是@IBOutlet weak var button:UIButton!
  • @TonyLin 这不是必需的,因为! 也是可选的。我推荐?,因为它会迫使您选择如何处理它 - 是否强制打开它。
  • 我的问题是在我的示例中,iPhone 尺寸中存在 1 个按钮,但 iPad 尺寸中没有。此按钮作为 IBOutlet 链接到我的 ViewController 文件。那么如果是!。这意味着如果我像button.backgroundColor = xxx 一样设置我的ViewController,它会崩溃,对吗?但如果我将其设为?,那么我可以改为button?.xxx。这是解决这个问题的唯一方法吗? @Sweeper
  • @TonyLin 如果你这样做button.backgroundColor = xxx 它确实会崩溃。但是您仍然可以使用UIButton! 来执行button?.xxx。但是UIButton?强制你添加一个?
  • 我明白了,这是解决这个特殊问题的唯一方法吗? @Sweeper
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 2019-04-24
  • 2023-03-04
  • 1970-01-01
相关资源
最近更新 更多