2017-09-03 66 views
0

我有许多许多现有UILabels在我想要子类化的项目中。而不是花个工作日内通过他们都单独在IB将它们设置为我UILabel子类要设置这些编程设置所有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

+0

其独特的环境和UIAppearance将无法正常工作,因为打印为PDF时出现问题。设计模式等没有在现实世界中的现有项目工作时很好 – JSA986