2016-02-19 118 views
0

我有一个的UITextField,我想限制lenght在这里4个字符是它的代码:限制的UITextField长度的限制我的一切UITextfields

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
     guard let text = acRegTextField.text else { return true } 

     let newLength = text.utf16.count + string.utf16.count - range.length 
     return newLength <= 4 // Bool 
    } 

问题是,有了这个代码,我的其他文本框被停止当acRegTextField为4个字符就可以了。

老实说,我不明白这一点...任何帮助,将不胜感激

感谢

回答

2

如果您的视图中有许多文本字段并将委派给它们,则shouldChangeCharactersInRange将应用于所有文本字段。所以你可以做的是,如果你已经有了一个应该只包含4个字符的文本字段的插口 - 那么只需比较这个文本字段就是你想要验证的字段 - 注意===比较了引用。例如:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    if acRegTextField === textField { 
     guard let text = acRegTextField.text else { return true } 

     let newLength = text.utf16.count + string.utf16.count - range.length 
     return newLength <= 4 // Bool 
    } 
    return true 
} 
+0

非常好的答案,我知道我不得不以某种方式将它包装在if语句中,但无法找出它是什么。解释很棒,让我更了解它 – Jp4Real

0

这是UITextFieldDelegate的方法。为了使这项工作,你必须说的地方

myTextField.delegate = myClass 

你说每个文本字段将得到相同的代表。如果您不想将限制应用于特定的textField,则不要为该textField设置委托。