有没有办法在UILabel文本发生变化时收到通知,或者我最好使用UITextFieldwith userInteractionEnabledset false并使用其UIControlEditingChanged事件来实现我的目的?
对于前者 每次我更改UILabel文本时都需要运行某些代码行.因此,不是为每种情况编写那100行几乎相似的代码,而是更改UILabel文本,我希望在一个地方一起编写它,并在每次UILabel更改时调用它.我甚至不知道这是否有意义.原谅我,但我不能暴露很多代码.
rid*_*cuk 26
创建一个继承自UILabel的类.如:
class YourLabel: UILabel {
override var text: String? {
didSet {
if let text = text {
println("Text changed.")
} else {
println("Text not changed.")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
为您的对象创建此类的出口.
@IBOutlet weak var label: YourLabel!
label.text = "abc"
Run Code Online (Sandbox Code Playgroud)
dev*_*oul 24
首先,将一个观察者添加到UILabel以获取关键路径text.
label.addObserver(self, forKeyPath: "text", options: [.old, .new], context: nil)
Run Code Online (Sandbox Code Playgroud)
然后
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "text" {
print("old:", change?[.oldKey])
print("new:", change?[.newKey])
}
}
Run Code Online (Sandbox Code Playgroud)
label.addObserver(self, forKeyPath: "text", options: [.Old, .New], context: nil)
Run Code Online (Sandbox Code Playgroud)
然后
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if keyPath == "text" {
print("old:", change["old"])
print("new:", change["new"])
}
}
Run Code Online (Sandbox Code Playgroud)
例如控制台将是:
old: Optional(<null>)
new: Optional(ABC)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10818 次 |
| 最近记录: |