5
  • 假设我有三个 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];

谢谢

4

3 回答 3

10

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

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

图 1

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

图 2

于 2013-09-19T10:58:04.183 回答
3

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

- (void) setLabelFont: (UIFont*) labelFont {
    _labelFont= labelFont;
    self.label1.font = self.label2.font = self.label3.font = labelFont;
}
于 2013-09-19T10:58:52.803 回答
1

你应该只继承 Y UILabel,在那里修改字体,然后你作为子类的一部分的任何标签都会有你的字体。当您有 100 多个要制作相同字体的标签时,它的编码更少,并且从长远来看可以为您省去麻烦。

于 2013-09-19T11:00:56.330 回答