TextView的委託設置的綱領性變化作出反應:當文本被設置編程如何以一個TextView文本
func textViewDidChange(_ textView: UITextView) {
print(textView.text)
}
textView.delegate = self //self being a UITextViewDelegate
但委託方法不會被調用
如何響應文本更改而不會反應?
TextView的委託設置的綱領性變化作出反應:當文本被設置編程如何以一個TextView文本
func textViewDidChange(_ textView: UITextView) {
print(textView.text)
}
textView.delegate = self //self being a UITextViewDelegate
但委託方法不會被調用
如何響應文本更改而不會反應?
我只是想上的UITextView志願,
self.textView1.text = "You are working, but I will change you in 5 seconds"
添加您的觀察者
self.textView1.addObserver(self, forKeyPath: "text", options: NSKeyValueObservingOptions(rawValue: 0), context: nil)
觸發文本編程方式的改變,只是一個例子做你想要的方式。
DispatchQueue.main.asyncAfter(deadline:.now() + 5) {
self.textView1.text = "Changed after some time"
}
覆蓋KVO方法。
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if object == self.textView1{
//do your thing here...
}
}
很酷的作品!然而,UIKit上的KVO的工作原理確實如下,僅供參考。
注意:雖然UIKit框架中的類一般不 支持志願,你仍然可以實現它在你的應用程序 的自定義對象,包括自定義視圖。
您有拼寫錯誤的委託與TextView的與_textView
func textViewDidChange(textView: UITextView) { //Handle the text changes here
print(textView.text); //the textView parameter is the textView where text was changed
}
在viewDidLoad中將這個
textView!.delegate = self
這是正確的,斯威夫特3.0/3.1需要簽名。 – satheeshwaran
@Saranjith Nope。這是Swift 3+上的正確簽名。 – Carpsen90
這是怎麼UITextField
(大多數UIKit的控件)behave-不會觸發事件時,以編程方式設置。它是有道理的 - 讓你避免重複的,無限的呼叫。
如果你真的想通知當文本以編程方式更改,你必須繼承UITextField
並覆蓋text
財產(可能attributedText
也)。然後在didSet
塊調用委託方法。
不要忘記,UITextField
繼承自UIControl
- 我也打電話sendActions(for:)
使目標行動機制失火。
OP詢問「UITextView」,而不是「UITextField」。大部分答案都是相關的,但不幸的是,'UITextView'不能從'UIControl'繼承,所以無法調用'sendActions(for:)'。 –
你可能需要添加一些什麼功能更改文本...或者,可能子類'UITextView'並添加你自己的「看更改」代碼。 – DonMag