ios - UILabel 子类使用自定义颜色初始化

标签 ios swift uiviewcontroller uilabel subclass

我的目标是在我的 View Controller 中设置自定义 UILabel 子类的 textColor。我有一个名为 CircleLabelUILabel 子类。以下是它的基础知识:

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/

相关文章:

swift - 按钮渐变在 ios 12 (Swift 4.2) 后不起作用

Swift 子字符串

ios - 如何快速安排相同的本地通知

iphone - iOS Bonjour 设备连接限制?

ios - 如何设置添加了导航 Controller 的 TableView 的背景图像 - Swift 1.2

ios - 带有自动布局裁剪 View 的 UIView 的圆角

ios - 将字符串传递给第二个 View Controller

ios - Objective-C 创建一个 ViewController 的实例

ios - 如何在 Storyboard 上创建 Segue,从以编程方式注册的 UICollectionViewCell 到新的 UIViewController?

ios - 将数据从 UIViewController1 传递到 UIViewController2 时 UIViewController2 的背景颜色消失