我想在UILabel的任何给定文本前添加一个空格。
我认为我可以按如下方式扩展UILabel类:
class UILabel_iKK: UILabel {
override var text: String? {
didSet {
if let txt = self.text {
self.text = " " + txt
}
}
}
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
但显然这会导致无限循环(即文本更改会导致didSet一次又一次地触发。
以最优雅的方式做到这一点的另一种方式是什么?
答案 0 :(得分:3)
是的,这是可能的。虽然我不喜欢它,但以下代码永远不会循环:
didSet {
if let txt = self.text, txt.first != " " {
self.text = " " + txt
}
}
答案 1 :(得分:2)
这应该有效
class Label_iKK: UILabel {
override var text: String? {
set(value) {
if let txt = value {
super.text = " " + txt
}
}
get {
return super.text
}
}
}
答案 2 :(得分:0)
感谢Andrea和Spads,感谢你们的想法!
我在阅读部分添加了空字符串添加 - 因为我只想在UI中看到它时在Label内部有额外的空格(但在代码中处理它时不是实际值)! )...
class UILabel_iKK: UILabel {
var myText: String? = ""
override var text: String? {
get {
if let txt = super.text {
if txt.count >= 3 {
return String(txt[3...])
} else {
return super.text
}
} else {
return super.text
}
}
set(value) {
if let txt = value {
super.text = " " + txt // 3 white-spaces added here...
}
}
}
}