swift 自定义便利构造器原则:
- 在自定义的 init方法前添加convenience 关键字,同时在内部调用 self.init() ,即一定要调用同级别的指定构造器
- 如果在子类中创建便利构造器,也要调用 self.init() ,同时重写init方法,如果不重写会报错
UIBarButtonItem+Extension 的扩展中添加便利构造器
import UIKit
extension UIBarButtonItem {
convenience init(image: String) {
let letBtn = UIButton()
letBtn.setBackgroundImage(UIImage(named:image), for: .normal)
letBtn.setBackgroundImage(UIImage(named:image + "_highlighted"), for: .highlighted)
letBtn.sizeToFit()
self.init(customView: letBtn)
}
}
复制代码
自定义button
class RightImageButton: UIButton {
convenience init (image: String, title: String, color: UIColor) {
self.init()
setImage(UIImage(named:image), for: .normal)
setImage(UIImage(named:image + "_highlighted"), for: .highlighted)
setTitle(title, for: .normal)
setTitle(title, for: .highlighted)
setTitleColor(color, for: .normal)
setTitleColor(color, for: .highlighted)
}
override init(frame: CGRect) {
super.init(frame: frame)
sizeToFit()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
//改变title的x坐标
titleLabel?.frame.origin.x = 0
imageView?.frame.origin.x = (titleLabel?.frame.size.width)! + 5
}
}
复制代码