gpt4 book ai didi

swift - UILabel 文本颜色扩展

转载 作者:行者123 更新时间:2023-11-28 09:33:40 25 4
gpt4 key购买 nike

我想为 UILabel 创建一个扩展,我想修改 UILabel 类以自动检查文本值是否为 positiv/negativ/cero,然后自动设置颜色。

我想在我的代码中初始化 UILabel 时激活它,如下所示:

lazy var labelValue: UILabel! = {
let lb = UILabel()
lb.activateUpDown = true
return lb
}()

这是我创建的扩展:

extension UILabel {
var activateUpDown: Bool {
set {
if activateUpDown == true {
textColor = colorUpDown(value: text)
}
}
get {
return true
}
}

func colorUpDown(value: String?) -> UIColor {
let valueDouble = Double(value ?? "0") ?? 0
var output:UIColor = .black
if valueDouble < 0 {
output = .red
} else {
if valueDouble > 0 {
output = .green
} else {
output = .black
}
}
return output
}
}

当我在初始化期间将 activateUpDown 设置为 true 时,它​​不起作用。

如果我放入 updateConstraints 它会起作用,但这不是我想要的。

override func updateConstraints() {
if(shouldSetupConstraints) {
shouldSetupConstraints = false
}
super.updateConstraints()
labelValue.activateUpDown = true
}

是否可以按照我想要的方式创建扩展程序,还是我的想法是胡说八道?

编辑:基本上我想要的是我想更改 textColor 的 Setter,如果 activateUpDown 设置为 true 并且有人将 textColor 设置为一个值。它检查值是否为正/负/零。

我最终做了一个 UILabel 的子类:

import UIKit

class CustomUILabel: UILabel {

var activateUpDown = false


var textValue: String? {
willSet(newValue){
text = newValue
if activateUpDown == true {
textColor = colorUpDown(value: newValue)
}
}
}

func colorUpDown(value: String?) -> UIColor {
let valueDouble = Double(value ?? "0") ?? 0
var output:UIColor = .black
if valueDouble < 0 {
output = .red
} else {
if valueDouble > 0 {
output = .green
} else {
output = .black
}
}
return output
}

required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}

override init(frame: CGRect) {
super.init(frame: frame)
}

/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/

}

最佳答案

或者利用 Swift 4 新的 Key-Value Observation 技能,不需要 UILabel 的扩展

创建属性

var textColorObservation : NSKeyValueObservation?

和观察者

textColorObservation = labelValue.observe(\.text, options: [.new])  { (label, change) in
guard let text = change.newValue!, let doubleValue = Double(text) else { return }
switch doubleValue {
case ..<0: label.textColor = .red
case 0: label.textColor = .black
default: label.textColor = .green
}
}

边注:

不要将 labelValue 声明为隐式解包可选。您显然返回了一个非可选对象。

关于swift - UILabel 文本颜色扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49821862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com