我的目标是在我的 View Controller 中设置自定义 UILabel
子类的 textColor
。我有一个名为 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 都默认为 UIColor.whiteColor() 的 textColor 属性,它可以正常工作。在我的 View Controller 的 viewDidLoad 中,我想将我的 CircleLabel 设置为具有动态 textColor
属性。所以像这样:
class myViewController: UIViewController {
@IBOutlet weak var myCustomLabel: CircleLabel!
override func viewDidLoad() {
super.viewDidLoad()
myCustomLabel.textColor = UIColor.blackColor()
}
这不起作用,因为 textColor
是在 UILabel
子类的 drawRect
方法中设置的。我可以在我的 CircleLabel
子类中实现什么(通过像我的 setProperties 辅助方法或其他一些辅助方法),这将允许我设置我的自定义标签的 textColor
我的 View Controller ?
最佳答案
截图
你不需要在你的情况下重写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.
}
}
关于ios - UILabel 子类使用自定义颜色初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33325919/