以编程方式将所有 UILabel 设置为子类

Posted

技术标签:

【中文标题】以编程方式将所有 UILabel 设置为子类【英文标题】:Set all UILabels to subclass programmatically 【发布时间】:2017-09-03 15:11:50 【问题描述】:

我想要子类化的项目中有很多很多现有的UILabels。与其花几天时间在 IB 中单独将它们设置为我的 UILabel 子类,不如以编程方式设置它们

在这里检查: How to programmatically set custom class?

尝试了几个猜测:UILabel_setClass(self.contentView, [MyLabel class]); - 隐式声明错误

和:

        Class  lbl = [[MyLabel alloc] init];

        for (id view in [self.contentView subviews]) 
            if ([view isKindOfClass:[UILabel class]]) 

                 //....sub it here?

                 
        

【问题讨论】:

【参考方案1】:

首先,更改对象类是非常糟糕的主意。这是一种气味代码。如果将来新开发人员将使用默认的UILabel 类,则可能会出现奇怪的错误。运行时 - 是 Objective-C 的一个伟大和最差的特性。它可以在坏人手中创造隐藏的错误。所以要非常小心地使用它,三思而后行——你在项目中真的需要它吗?更好的是 - 明确编写代码,使用设计模式等。

在您的问题中不清楚为什么需要更改对象类。如果您需要它来改变外观 - 然后使用UIAppearance。如果您需要扩展功能,请使用Extensions

【讨论】:

这是一个独特的情况,UIAppearance 在打印为 PDF 时会出现问题。当不在现实世界场景中处理现有项目时,设计模式等很好

以上是关于以编程方式将所有 UILabel 设置为子类的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将 UILabel 字体设置为用户定义的运行时属性

你在哪里以编程方式在 UIView 中为 UILabel 设置文本?

以编程方式使用自动布局实现带有子视图的 uiview 子类

如何以编程方式设置 UILabel 位置 iOS 7

如何以编程方式在 UILabel 上设置accessibilityLabel?

以编程方式将标签的 maxPreferredLayoutWidth 设置为自动?