2015-10-25 4 views
4

Моя цель - установить textColor моего подкласса UILabel в моем контроллере. У меня есть подкласс UILabel по имени CircleLabel. Вот основы этого:Подкласс UILabel инициализируется пользовательским цветом

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 
} 

}

Как вы можете видеть, каждый CircleLabel я создаю экземпляр по умолчанию настроен на свойство TextColor из UIColor.whiteColor(), которая работает должным образом. На мой взгляд, viewDidLoad контроллера, я хочу установить для CircleLabel динамическое свойство textColor. Так что-то вроде этого:

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

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

Это не работает, потому что textColor установлен в drawRect способе UILabel подкласса. Что я могу реализовать в моем подклассе CircleLabel (с помощью вспомогательного метода, такого как мой метод setProperties или каким-либо другим способом), который позволил бы мне установить textColor моей пользовательской метки в моем контроллере представления?

ответ

12

Скриншот

Вам не нужно переопределить drawRect в вашем случае, просто создать класс, как этот

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

Тогда

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

} 
+0

ли вы принять то же самое подход для переопределения «шрифта» метки, содержащей атрибутный текст? Подобно тому, как использовать текущий атрибут текста в «общем в» и переопределять его изменчивой копией, которая содержит другой шрифт. (Просто интересно, будет ли это работать, поскольку у вас есть опыт в этом, и я сам это ищу) – Pochi