titlelabel settitle color buttons ios uibutton swift

ios - settitle - Objective C Setter anula en Swift



swift button action (3)

En Swift, la solución anterior funcionó para mí, pero tuve que omitir el Bool = verdadero :

import UIKit class CustomUIButtonForUIToolbar: UIButton { // Only override drawRect: if you perform custom drawing. // An empty implementation adversely affects performance during animation. override func drawRect(rect: CGRect) { // Drawing code super.drawRect(rect) self.layer.borderColor = UIColor.blueColor().CGColor self.layer.borderWidth = 1.0 self.layer.cornerRadius = 5.0 self.clipsToBounds = true self.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal) self.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Highlighted) } override var highlighted: Bool { didSet { if (highlighted) { self.backgroundColor = UIColor.blueColor() } else { self.backgroundColor = UIColor.clearColor() } } } }

Necesito anular el setter de la propiedad resaltada de UIViews en mi subclase UIButton personalizada;

C objetivo

@property(nonatomic,getter=isHighlighted) BOOL highlighted;

anulado así

- (void) setHighlighted:(BOOL)highlighted { [super setHighlighted:highlighted]; if (highlighted) { self.backgroundColor = UIColorFromRGB(0x387038); } else { self.backgroundColor = UIColorFromRGB(0x5bb75b); } [super setHighlighted:highlighted]; }

Rápido

var highlighted: Bool

Lo intenté:

var highlighted: Bool { get{ return false } set { if highlighted { self.backgroundColor = UIColor.whiteColor() //Error "Use unresolved identifier ''self''" I can''t set the background color from value type in here , can''t call self.backgroundColor in this value type , can''t call super too because this is a value type , doesn''t work } } }

Cómo y dónde debería implementar este método en Swift para obtener el mismo resultado. ¿alguna idea?


Está utilizando computed properties en su lugar, usa stored property . Como no hay UIColorFromRGB provisto en forma rápida, escribí el mío

class ViewSubClass:UIView{ var highlighted: Bool = true { didSet { if (highlighted) { self.backgroundColor = UIColorFromRGB(0x387038); } else { self.backgroundColor = UIColorFromRGB(0x5bb75b); } } } init(frame: CGRect) { super.init(frame: frame) } func UIColorFromRGB(rgbValue: UInt) -> UIColor { return UIColor( red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, blue: CGFloat(rgbValue & 0x0000FF) / 255.0, alpha: CGFloat(1.0) ) } }


Hay un par de cosas mal aquí, pero esta solución debería ayudarte ...

En su caso, dado que realmente no desea valores calculados para la variable resaltada , sino que todo lo que desea es saber cuándo se ha cambiado el resaltado, debe usar willSet o didSet.

para su caso, didSet .

se parece a esto

var highlighted:Bool = false { didSet { // You can use ''oldValue'' to see what it used to be, // and ''highlighted'' will be what it was set to. if highlighted { self.backgroundColor = UIColor.whiteColor() } else { self.backgroundColor = UIColor.blackColor() } } }

Tenga en cuenta que el valor inicial se establece en falso PERO la inicialización de la variable no llama al bloque didSet (no lo creo), por lo tanto, inicialice esta vista por defecto con backgroundColor black ... o lo que sea.

el Swift ibook tiene algunos buenos consejos sobre set, get, didSet y willSet, alrededor de la página 250 ish.

Avíseme si el error persiste (y, de ser así, debería publicar cuando establezca esta variable y los encabezados de clase y demás, puede que no sea suficiente información. Además, ¿está utilizando xcode6-beta4?)