UILabel子类用自定义颜色初始化
我的目标是在我的视图控制器中设置我的自定义UILabel
子类的textColor
。 我有一个名为CircleLabel
的UILabel
子类。 这里是它的基础:
class CircleLabel: UILabel { required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder)! } override init(frame: CGRect) { super.init(frame: frame) } override func drawRect(rect: CGRect) { self.layer.cornerRadius = self.bounds.width/2 self.clipsToBounds = true super.drawRect(rect) } override func drawTextInRect(rect: CGRect) { self.textColor = UIColor.whiteColor() super.drawTextInRect(rect) } func setProperties(borderWidth: Float, borderColor: UIColor) { self.layer.borderWidth = CGFloat(borderWidth) self.layer.borderColor = borderColor.CGColor }
}
正如你所看到的,我实例化的每个CircleLabel都默认为UIColor.whiteColor()的textColor属性,它可以正常工作。 在我的视图控制器的viewDidLoad,我想设置我的CircleLabel有一个dynamic的textColor
属性。 所以像这样的东西:
class myViewController: UIViewController { @IBOutlet weak var myCustomLabel: CircleLabel! override func viewDidLoad() { super.viewDidLoad() myCustomLabel.textColor = UIColor.blackColor() }
这是行不通的,因为textColor
是在UILabel
子类的drawRect
方法中设置的。 我可以在我的CircleLabel
子类中实现什么(通过像我的setProperties帮助器方法或其他方式的帮助器方法),这将允许我在我的视图控制器中设置我的自定义标签的textColor
?
截图
你不需要在你的情况下重写drawRect
,只需像这样创build类
class CircleLabel: UILabel { required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder)! self.commonInit() } override init(frame: CGRect) { super.init(frame: frame) self.commonInit() } func commonInit(){ self.layer.cornerRadius = self.bounds.width/2 self.clipsToBounds = true self.textColor = UIColor.whiteColor() self.setProperties(1.0, borderColor:UIColor.blackColor()) } func setProperties(borderWidth: Float, borderColor: UIColor) { self.layer.borderWidth = CGFloat(borderWidth) self.layer.borderColor = borderColor.CGColor } }
然后
class ViewController: UIViewController { @IBOutlet weak var myCustomLabel: CircleLabel! override func viewDidLoad() { super.viewDidLoad() myCustomLabel.textColor = UIColor.blackColor() // Do any additional setup after loading the view, typically from a nib. } }