我正在制作一个iPad应用程序来学习英语单词。只要在文本字段中输入字符,就需要在文本字段中检查输入。 我正在使用swift函数shouldChangeCharactersInRange来完成此任务。
我的代码:
func textField(textField: UITextField, shouldChangeCharactersInRange range:NSRange, replacementString string: String) -> Bool {
if TextField1.text == "apple" {
checkImageView1.hidden = false
}
else {
checkImageView1.hidden = true
}
return true
}
如果单词输入正确,则需要显示图像,在这种情况下" apple"。 问题是当用户输入" e" " apple"支票只能看到" appl"因此没有显示图像。
任何人都知道如何解决这个问题?
答案 0 :(得分:15)
您可以使用控件事件textField
代替委托方法EditingChanged
使用目标。
Swift> = 1.0
myTextField.addTarget(self, action: "didChangeText:", forControlEvents: .EditingChanged)
Swift 3.0 (不推荐使用字符串文字选择器,使用#selector)
myTextField.addTarget(self, action: #selector(didChangeText(_:)), for: .editingChanged)
然后使用目标方法运行检查。
func didChangeText(textField:UITextField) {
if textField.text == "apple" {
checkImageView1.hidden = false
} else {
checkImageView1.hidden = true
}
}
答案 1 :(得分:3)
虽然Wezly的回答是正确的,但是它只看到“appl”而不是“apple”的原因是因为textField
的文本没有用最新的条目更新,因为它的名称是委托方法声明shouldChangeCharactersInRange
。您应该更换新条目并使用以下内容检查新值,而不是检查textField
的文本。
Swift 3
let newText = textField.text?.replacingCharacters(in: range, with: string)
如果您只想获取最新值,则使用事件EditingChanged
会有效,但如果您想要对之前的每个条目进行一些验证,那么实际编辑的文字就是使用委托方法。
答案 2 :(得分:2)
不使用委托方法,而是将方法附加到事件"编辑值更改"并接受textField作为发件人。
在viewDidLoad方法中:
textField.addTarget(self, action: "textFieldEdited:", forControlEvents: UIControlEvents.EditingChanged)
这是将被激活的方法
func textFieldEdited(sender: UITextField)
{
var text = sender.text
}
答案 3 :(得分:2)
使用以下代码。此函数获取在变量string
中添加的新字符串值。如果将它与textField1.text连接,您将在textField中获得完整的字符串。
func textField(textField: UITextField, shouldChangeCharactersInRange range:NSRange, replacementString string: String) -> Bool {
var startString = "" + TextField1.text+string //Now this should be 'Apple'
return true
}
答案 4 :(得分:2)
Swift 3
正确地提到 chengsam :replacingCharacters in: with:
需要NSString
。所以你需要做这样的事情:
let newText = NSString(string: textField.text!).replacingCharacters(in: range, with: string)