输入时检查UITextField中的字符串长度

时间:2015-06-28 12:18:11

标签: swift uitextfield uitextfielddelegate

我在View Controller中有两个UITextView。每个文本的最大长度文本必须是4个字符。 当我在第一个文本字段中放入4个字符时,我必须转到第二个文本视图, 当我在第二个文本视图中放入4个字符时,我必须运行一些函数。

我使用shouldChangeCharactersInRange的{​​{1}}:

UITextFieldDelegate

但是现在我遇到了一个问题:当我在第一个文本字段中有4个字符时,我按下了5英尺,然后运行此委托函数。

2 个答案:

答案 0 :(得分:2)

我不明白你的意思,但是你需要使用" ==="来检查对象本身的引用,而不是值,因为你可以拥有相同的两个文本字段中的文本(以及文本字段具有的其他属性)。" =="检查值。

另外,请确保两个文本字段都具有委托集

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
        if textField === firstText{
            var text = firstText.text as NSString
            if (text.length == 4){
                secondText.becomeFirstResponder()
            }
        }
        if textField === secondText{
            var text = secondText.text as NSString
            if (text.length == 4){
                seccessAction()
            }
        }
        return true;
    }

答案 1 :(得分:0)

您正在使用shouldChangeCharactersInRange:,询问是否应更新字符串中的文字。因此,该文本尚未更新。找到包含这些新字符的新字符串,然后检查它的长度。

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    var newString = textField.text.stringByReplacingCharactersInRange(range.toRange(textField.text), withString: string) as NString
    if (textField == firstText){
        if newString.length == 4 {
            secondText.becomeFirstResponder()
        }
    }
    if (textField == secondText){
        if newString.length == 4{
            successAction()
        }
    }

    return true
}


extension NSRange {
    func toRange(string: String) -> Range<String.Index> {
        let startIndex = advance(string.startIndex, location)
        let endIndex = advance(startIndex, length)

        return startIndex..<endIndex
    }
}