UILabel sottoclasse inizializzare con colore personalizzato

Il mio obiettivo è quello di impostare il textColor della mia custom UILabel sottoclasse nel mio view controller. Ho un UILabel sottoclasse di nome CircleLabel. Qui ci sono le basi:

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
}

}

Come si può vedere, ogni CircleLabel crea un’istanza di default un textColor proprietà di UIColor.whiteColor(), che funziona correttamente. Nel mio view controller viewDidLoad, voglio impostare la mia CircleLabel per avere una dinamica textColor proprietà. Quindi, qualcosa di simile a questo:

class myViewController: UIViewController {
    @IBOutlet weak var myCustomLabel: CircleLabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        myCustomLabel.textColor = UIColor.blackColor()
}

Che non funziona perché textColor è situato nel drawRect metodo di UILabel sottoclasse. Cosa posso implementare nella mia CircleLabel sottoclasse (tramite un metodo di supporto come il mio setProperties metodo helper o in qualche altro modo) che mi permetta di impostare il textColor della mia etichetta personalizzata nella mia view controller?

OriginaleL’autore Aaron | 2015-10-25

One Reply
  1. 22

    Schermata

    UILabel sottoclasse inizializzare con colore personalizzato

    Non è necessario eseguire l’override drawRect nel tuo caso,basta creare la classe

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

    Poi

    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.
        }
    
    }
    Vuoi prendere lo stesso approccio per ignorare il “carattere” di una etichetta che contiene un Testo Attribuito? Come prendere la corrente attribuita testo in “comune” e sovrascriverlo con un mutevole copia che contiene un tipo di carattere diverso. (Solo chiedendo se avrebbe funzionato dal momento che si dispone di esperienza nel settore it e sto cercando questa me)
    Ho Initializer does not override a designated initializer from its superclass quando si utilizza override init sul UILabel

    OriginaleL’autore Leo

Lascia un commento