使用解决方案更新了代码。
这适用于您想要的任意数量的字段。
当方法返回false时,它还修复了文本字段冻结的问题。
下面的行是指导方法在返回false后返回true。
.PRECIOUS
在视图上加载(这将为每个字段添加一个标识符,以便您可以在方法中识别正在使用的字段 - 它是一个Int())
newString = currentString.stringByReplacingCharactersInRange(range, withString: string)
委托方法
emailAddressField.tag = 1
userPasswordField.tag = 2
答案 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
}