2

我目前正在使用统一的故事板(带有大小类)。对于我的观点之一,wAny hAny 和 wRegular hRegular 尺寸类之间的设计差异非常显着,以至于基于尺寸类改变子视图的约束是不够的。

一个简化的示例:我在 wAny hAny 大小类中有一个 UILabel,名为“First_Name_Label”。虽然我希望将这个 UILabel 用于 wRegular hRegular 尺寸类,但设计差异太大,所以我为 wRegular hRegular 尺寸类添加了一个 UILabel 以复制“First_Name_Label”的用途,我称之为“First_Name_Label 2”。“First_Name_Label”仅安装在 wAny hAny 尺寸类中,“First_Name_Label 2”仅安装在 wRegular hRegular 尺寸类中。

在我的代码中,我想为标签设置文本:

self.First_Name_Label.text = "my first name"

但我也需要为其他尺寸类做这件事,我的代码如下:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomIpad) {
    self.First_Name_Label2.text = "my first name"
} else {
    self.First_Name_Label.text = "my first name"
}

这看起来很麻烦,基本上是我当前代码的两倍。我确信有一种更优雅和更有效的方式来一次引用这 2 个 IBOutlets(每个都属于不同的大小类)。

4

3 回答 3

2

您不能将 IBOutlet 属性与多个对象连接。

但是您可以在这些标签上使用相同的标签并像这样访问它们:

(UILabel *)[self.view viewWithTag:LABEL_TAG];
于 2015-06-10T10:28:23.413 回答
1

只需使用选项:

self.First_Name_Label2?.text = "my first name"
self.First_Name_Label?.text = "my first name"

在这种情况下,First_Name_Label 和 First_Name_Label2 是可选的,如果未初始化,代码将忽略它。利用它们在类中也被声明为可选项:

var First_Name_Label:UILabelView?
var First_Name_Label2:UILabelView?
于 2015-06-10T00:24:29.123 回答
1

您是否考虑过使用IBOutletCollection?

例如

@property (nonatomic, strong) IBOutletCollection(UILabel) NSArray *First_Name_Labels;

在代码中,您调用:

for (UILabel *First_Name_Label in self.First_Name_Labels) { First_Name_Label.text = "my first name"; }

这也很容易让您将范围扩展到更多尺寸等级。

于 2016-02-22T20:23:56.407 回答