ios swift uiviewcontroller uilabel subclass

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