现在我编辑这个字体的类型/大小等,并期望这些标签的字体也会改变,但这不会发生。我基本上需要将单个字体应用于多个标签,我知道这可以通过插座集合完成,但我只是想帮助理解我的逻辑中的缺陷所以这是我的代码......
self.labelFont = [UIFont fontWithName:@"System" size:12];
self.label1.font = self.labelFont;
self.label2.font = self.labelFont;
self.label3.font = self.labelFont;
self.labelFont = [UIFont fontWithName:@"Courier" size:30];
感谢
答案 0 :(得分:10)
在代码中,您可以创建两个对象[UIFont fontWithName:@"System" size:12]
和[UIFont fontWithName:@"Courier" size:30]
。
最初,您的labelFont
变量指向第一个字体对象。然后将分配中的指针复制到三个标签的字体中。此时,您有四个引用同一对象的指针 - 即[UIFont fontWithName:@"System" size:12]
调用返回的对象。
接下来,您将labelFont
更改为指向[UIFont fontWithName:@"Courier" size:30]
。一旦你这样做,labelFont
开始指向那个新对象;它不再指向旧对象。但是,这三个标签仍指向旧字体,因此它们的外观不会改变。
答案 1 :(得分:3)
这不能立即完成,你需要一个能够改变每个标签字体的指针指针。但是当调用setter时它会触发一个也可能导致一些副作用的方法,所以更好的方法是创建一个setter来处理这个行为:
- (void) setLabelFont: (UIFont*) labelFont {
_labelFont= labelFont;
self.label1.font = self.label2.font = self.label3.font = labelFont;
}
答案 2 :(得分:1)
你应该只是子类 ÿ UILabel,修改那里的字体,然后你作为子类的一部分的任何标签将具有你的字体。编码较少,如果您有100多个标签可以制作相同的字体,可以长期保存您的头痛。