Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何响应文本视图文本的编程更改_Ios_Swift_Textview - Fatal编程技术网

Ios 如何响应文本视图文本的编程更改

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委托:

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...
    }
}