當我嘗試使用我設計的自定義UILabel時,我遇到了一個奇怪的問題。該視圖在故事板中可見並且它的屬性可以正常工作。現在我所做的是在我的Designable類中,我設置了一個名爲isError
的屬性,在設置時,我需要在文本的開頭附加*。使用IBDesignable UILabel類時出現奇怪的問題
但是,只要在我的代碼中這樣做,我的Designable屬性不會被使用,並且標籤在設備上沒有正確顯示,它將UILabel的默認屬性添加到文本中。不知道我哪裏錯了。
在VC的自定義標籤代碼
@IBDesignable class KGIBDesignableLabel: UILabel {
@IBInspectable var verticalPad: CGFloat = 0
@IBInspectable var horizontalPad: CGFloat = 0
var isError: Bool = false{
didSet {
setup()
}
}
override func awakeFromNib() {
super.awakeFromNib()
setup()
}
override func layoutSubviews() {
super.layoutSubviews()
setup()
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
setup()
}
func setup(){
if isError{
text="*"+text!;
textColor = UIColor.KGColorPalette.errorMessageColor
}else{
textColor = UIColor.KGColorPalette.textEntryLabelColor
text=text!;
}
font = UIFont(name: "Helvetica", size: 14)
clipsToBounds = true
textAlignment = .center
numberOfLines = 0
lineBreakMode = NSLineBreakMode.byWordWrapping
sizeToFit()
}
override var intrinsicContentSize: CGSize {
let superSize = super.intrinsicContentSize
let newWidth = superSize.width + superSize.height + (2 * horizontalPad)
let newHeight = superSize.height + (2 * verticalPad)
let newSize = CGSize(width: newWidth, height: newHeight)
return newSize
}
}
接入代碼
class ViewController: UIViewController {
@IBOutlet weak var labelCustom: KGIBDesignableLabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
labelCustom.isError=true
// After adding this^ line it takes default UILabel properties
}
你需要改變值後,再次設立呼叫的方法,如果ISERROR –
的變化值是在設置方法本身內?它可能會遞歸。 –
另外我試圖做的變量的didSet方法。它確實將*添加到文本中,但隨後標籤的大小變得不合適,並且它將文本分割成多行,即使有空間可以更多 –