textViewDidChange函数不响应

时间:2018-07-31 13:56:47

标签: swift uitextview

每次用户输入任何文本时,我都试图编写Swift代码来更改UITextView中的背景颜色。我已经委派了UITextView并这样添加了textViewDidChange

extension DocumentViewController: UITextViewDelegate {

    func textViewDidChange(_ textView: UITextView) {
        let currentText = self.textView.text

        var seed = 0

        if currentText != self.textView.text {
            let myNum = seed%4
            let myColor = colorPicker(num: myNum)
            self.textView.backgroundColor = myColor
            seed += 1
        }
    }

    func colorPicker(num: Int) -> UIColor {
        let colors = [UIColor.red, UIColor.blue, UIColor.green, UIColor.purple]

        return colors[Int(num)]
    }

}

对我来说,这段代码似乎合乎逻辑,并且Xcode不会给我任何错误,但是,当我运行该程序时,我没有得到期望的结果。

为了进一步测试我的功能,我尝试打印变量seed,并且该值递增1。但是,该值保持为1,并且每次输入时都不会像我想的那样继续递增,并且我的输出看起来像这样:

1
1
1
1
1
1
1

我还尝试在var seed = 0类中添加DocumentViewController,并在self.seed中将我的呼叫更改为textViewDidChange,如下所示:

func textViewDidChange(_ textView: UITextView) {

        let currentText = self.textView.text
        if currentText != self.textView.text {

            let myNum = self.seed % 4
            let myColor = colorPicker(num: myNum)
            self.textView.backgroundColor = myColor
            self.seed += 1
        }
    }

但是种子不会更新甚至不会打印。

最后,我的textViewDidChange没有响应任何进一步的更改。对这个问题有什么想法吗?

1 个答案:

答案 0 :(得分:1)

该控件将永远不会进入

if currentText != self.textView.text 

等于

if self.textView.text != self.textView.text 

这是错误的

//

将种子声明为类DocumentViewController内的实例变量

var seed = 0
var oldText = ""

//

func textViewDidChange(_ textView: UITextView) { 

    if oldText != self.textView.text! {

       let myNum = seed%4
       let myColor = colorPicker(num: myNum)
       self.textView.backgroundColor = myColor
       seed += 1 
       oldText = self.textView.text!
   }
 }

//

还有一件事要提到,如果用户对其进行编辑,则不需要oldText var,因为文本将始终具有新的更改;如果您从服务器调用中设置了该内容,则不知道该内容,然后将其保留