我有UITextView的子类,它需要具有特定的默认外观。到目前为止,我已经能够通过重写initialize()类函数来实现此目的,该函数已在Swift 3.1中弃用。
public class CustomTextView : UITextView {
override public class func initialize() {
self.appearance().backgroundColor = .green
}
}
有没有一种方法可以实现相同的纯Swift功能?
最佳答案
我正在通过使用这样的构造来解决类方法initialize
的丢失:
class CustomTextView : UITextView {
override init(frame: CGRect, textContainer: NSTextContainer?) {
super.init(frame:frame, textContainer: textContainer)
CustomTextView.doInitialize
}
required init?(coder aDecoder: NSCoder) {
super.init(coder:aDecoder)
CustomTextView.doInitialize
}
static let doInitialize : Void = {
CustomTextView.appearance().backgroundColor = .green
}()
}
这种构造的优点是
doInitialize
仅初始化一次,因此与它关联的代码将仅运行一次(在这种情况下,我们将仅配置外观代理一次);而且还早就影响了创建的第一个实例(也就是说,您制作的每个CustomTextView实际上都是绿色的)。