ios - Subclase UILabel inicializar con color personalizado
swift uiviewcontroller (1)
Mi objetivo es establecer el textColor
de mi subclase UILabel
personalizada en mi controlador de vista. Tengo una subclase CircleLabel
llamada CircleLabel
. Aquí están los fundamentos de esto:
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
}
}
Como puede ver, cada instancia de CircleLabel I está predeterminada en una propiedad textColor de UIColor.whiteColor (), que funciona correctamente. En mi opinión viewDidLoad del controlador, quiero configurar mi CircleLabel para que tenga una propiedad dynamic textColor
. Entonces algo como esto:
class myViewController: UIViewController {
@IBOutlet weak var myCustomLabel: CircleLabel!
override func viewDidLoad() {
super.viewDidLoad()
myCustomLabel.textColor = UIColor.blackColor()
}
Eso no funciona porque textColor
se establece en el método drawRect
de la subclase UILabel
. ¿Qué puedo implementar en mi subclase CircleLabel
(a través de un método de ayuda como mi método de ayuda setProperties o de alguna otra manera) que me permita establecer el textColor
de mi etiqueta personalizada en mi controlador de vista?
Captura de pantalla
No es necesario que anule drawRect
en su caso, solo cree la clase como esta
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
}
}
Entonces
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.
}
}