我目前正在使用统一的故事板(带有大小等级)。对于我的一个视图,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(每个属于不同大小的类)。
答案 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";
}
这也可以让您轻松地将范围扩展到更多尺寸类别。