Textfield应该迅速改变字符范围

时间:2015-04-13 10:46:50

标签: ios swift

我正在制作一个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"因此没有显示图像。

任何人都知道如何解决这个问题?

5 个答案:

答案 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)