Ios 如何响应文本视图文本的编程更改
已设置TextView委托:Ios 如何响应文本视图文本的编程更改,ios,swift,textview,Ios,Swift,Textview,已设置TextView委托: textView.delegate = self //self being a UITextViewDelegate 但是当以编程方式设置文本时,不会调用委托方法 如何在不作出反应的情况下响应文本更改?您将该代表与textView和_textView拼写错误 func textViewDidChange(textView: UITextView) { //Handle the text changes here print(textView.tex
textView.delegate = self //self being a UITextViewDelegate
但是当以编程方式设置文本时,不会调用委托方法
如何在不作出反应的情况下响应文本更改?您将该代表与textView和_textView拼写错误
func textViewDidChange(textView: UITextView) { //Handle the text changes here
print(textView.text); //the textView parameter is the textView where text was changed
}
把这个放进视窗
textView!.delegate = self
这就是
UITextField
(以及大多数UIKit控件)的行为方式-以编程方式设置时不会触发事件。这是有道理的-让你避免重复,无限的电话
如果您确实希望在以编程方式更改文本时收到通知,则必须对UITextField
进行子类化,并重写text
属性(也可能是attributedText
)。然后在didSet
block中调用委托方法
不要忘记,
UITextField
继承自UIControl
-我也会调用sendActions(for:)
使目标操作机制启动。我刚刚在UITextView上尝试了KVO
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,您仍然可以在您的
应用程序,包括自定义视图
您可能需要在更改文本的任何函数中添加一些内容。。。或者,可能子类
UITextView
并添加您自己的“监视更改”代码。没错,Swift 3.0/3.1需要该签名。@Saranjith Nope。这是Swift 3+上的正确签名,OP询问的是UITextView
,而不是UITextField
。大多数答案都是相关的,但不幸的是,UITextView
没有继承自UIControl
,因此无法调用sendActions(for:)
。
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if object == self.textView1{
//do your thing here...
}
}