我有一个UITextView的子类,它需要具有特定的默认外观。到目前为止,我已经能够通过重写initialize()类函数来实现这一点,该函数已在Swift 3.1中弃用。
public class CustomTextView : UITextView {
override public class func initialize() {
self.appearance().backgroundColor = .green
}
}
有没有办法实现纯粹的Swift相同的东西?
答案 0 :(得分:1)
我通过使用这样的结构解决了类方法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实际上都是绿色的)。