最有效的方式一次引用2个不同的IBOutlet(每个IBOutlets只存在它自己的大小类)?

时间:2015-06-10 00:09:50

标签: ios xcode iboutlet size-classes universal-storyboard

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

一个简单的例子:我在wAny hAny size class中有一个名为" First_Name_Label"的UILabel。虽然我希望将这个UILabel重用于wRegular hRegular大小类,但是设计太不同了,所以我为wRegular hRegular大小类添加了一个UILabel来复制" First_Name_Label"的目的,我称之为" First_Name_Label 2"。 " First_Name_Label"仅安装在wAny hAny size class中," 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"
}

这看起来非常麻烦,基本上加倍了我当前的代码。我确信这是一种更优雅,更有效的方式来同时引用这两个IBOutlet(每个属于不同大小的类)。

3 个答案:

答案 0 :(得分:2)

您无法将IBOutlet属性与多个对象相关联。

但是你可以在这些标签上使用相同的标签并按照以下方式使用它们:

(UILabel *)[self.view viewWithTag:LABEL_TAG];

答案 1 :(得分: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?

答案 2 :(得分:1)

您是否考虑使用IBOutletCollection

e.g。

@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"; }

这也可以让您轻松地将范围扩展到更多尺寸类别。