【问题标题】:Changing UILabel font更改 UILabel 字体
【发布时间】:2013-09-24 10:00:21
【问题描述】:
  • 假设我有三个 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];

谢谢

【问题讨论】:

    标签: ios objective-c uilabel uifont


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 该死,你比我快五秒。投票赞成。也许我会将第三行分成一个方法-(void)resetFonts 并在那里调用self.label1.font = self.labelFont...。用于缩放。并从setLabelFont: 调用resetFonts 方法。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-06-24
        • 1970-01-01
        • 1970-01-01
        • 2015-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-14
        相关资源
        最近更新 更多