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.
}
}