每次用户输入任何文本时,我都试图编写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没有响应任何进一步的更改。对这个问题有什么想法吗?
答案 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,因为文本将始终具有新的更改;如果您从服务器调用中设置了该内容,则不知道该内容,然后将其保留