shouldChangeCharactersInRange多个文本字段被冻结

时间:2015-08-09 08:15:50

标签: swift uitextfielddelegate

使用解决方案更新了代码。

这适用于您想要的任意数量的字段。

当方法返回false时,它还修复了文本字段冻结的问题。

下面的行是指导方法在返回false后返回true。

.PRECIOUS

在视图上加载(这将为每个字段添加一个标识符,以便您可以在方法中识别正在使用的字段 - 它是一个Int())

newString = currentString.stringByReplacingCharactersInRange(range, withString: string)

委托方法

    emailAddressField.tag = 1
    userPasswordField.tag = 2

1 个答案:

答案 0 :(得分:2)

问题在于,委托方法shouldChangeCharactersInRange用于两个文本字段,在您的实施中,只要其中一个文本字段达到其最终限制,您就会返回false两个文本字段拒绝进一步输入。要解决此问题,您需要检查方法的textField参数,以确定要为其调用方法的文本字段。

执行此操作的一种可能方法是在两个文本字段上设置标记,例如viewDidLoad

override func viewDidLoad() {
    ...
    emailAddressField.tag = EMAIL_ADDRESS_TEXTFIELD // e.g. 0
    userPasswordField.tag = USER_PASSWORD_TEXTFIELD // e.g. 1
}

然后对提供给委托方法

的文本字段的标记进行操作
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    let newString = textField.text!.stringByReplacingCharactersInRange(range, withString: string)

    if textField.tag == EMAIL_ADDRESS_TEXTFIELD && count(newString) + 1 == 30 {
        return false
    }

    if textField.tag == USER_PASSWORD_TEXTFIELD && count(newString) + 1 == 11 {
        return false
    }

    return true
}