swift自定义便利构造器的实现

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
    }
    
}
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值