设置所有UILabel以编程方式进行子类化
问题描述:
我有许多许多现有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?
}
}
答
首先,改变对象类是非常糟糕的主意。这是一种气味代码之一。如果将来新开发人员将使用默认的UILabel
类,则可能会出现奇怪的错误。运行时 - 是Objective-C的一个很好且最糟糕的功能。它可以在坏手中创建隐藏的错误。所以,使用它非常小心,两次思考 - 你真的需要它在项目中。更好 - 明确地写出你的代码,使用设计模式等。
在你的问题不清楚你为什么需要改变对象类。如果您需要它来改变外观 - 请使用UIAppearance
。如果您需要扩展功能,请使用Extensions
。
其独特的环境和UIAppearance将无法正常工作,因为打印为PDF时出现问题。设计模式等没有在现实世界中的现有项目工作时很好 – JSA986