更改UILabel字体

时间:2013-09-19 10:50:28

标签: ios objective-c uilabel uifont

  • 说我有三个UILabel。
  • 我创建了一个字体并将该字体分配给 所有三个标签。

现在我编辑这个字体的类型/大小等,并期望这些标签的字体也会改变,但这不会发生。我基本上需要将单个字体应用于多个标签,我知道这可以通过插座集合完成,但我只是想帮助理解我的逻辑中的缺陷所以这是我的代码......

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];

感谢

3 个答案:

答案 0 :(得分:10)

在代码中,您可以创建两个对象[UIFont fontWithName:@"System" size:12][UIFont fontWithName:@"Courier" size:30]

最初,您的labelFont变量指向第一个字体对象。然后将分配中的指针复制到三个标签的字体中。此时,您有四个引用同一对象的指针 - 即[UIFont fontWithName:@"System" size:12]调用返回的对象。

Illustration 1

接下来,您将labelFont更改为指向[UIFont fontWithName:@"Courier" size:30]。一旦你这样做,labelFont开始指向那个新对象;它不再指向旧对象。但是,这三个标签仍指向旧字体,因此它们的外观不会改变。

Illustration 2

答案 1 :(得分:3)

这不能立即完成,你需要一个能够改变每个标签字体的指针指针。但是当调用setter时它会触发一个也可能导致一些副作用的方法,所以更好的方法是创建一个setter来处理这个行为:

- (void) setLabelFont: (UIFont*) labelFont {
    _labelFont= labelFont;
    self.label1.font = self.label2.font = self.label3.font = labelFont;
}

答案 2 :(得分:1)

你应该只是子类 ÿ UILabel,修改那里的字体,然后你作为子类的一部分的任何标签将具有你的字体。编码较少,如果您有100多个标签可以制作相同的字体,可以长期保存您的头痛。