限制Swift 2中多个UITextField的长度

一个限制TextField长度但是函数count已经更新的解决方案,也是count()函数,所以我不明白如何使用它:

 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { let newLength = count(textField.text.utf16) + count(string.utf16) - range.length return newLength <= 10 // Bool } 

以及如何更新这个以在多个TextField上工作,我想我必须说

 textField = thisTextField.text... 

shouldChangeCharactersInRange执行以下操作(引自文档 )

询问代理是否应更改指定的文本。

您添加的此方法代码会检查它是否超出您的限制(在您的示例中,它是10)并返回false,这意味着textField不应更改值。 如果它没有超过限制,它将返回true,textField将更改值。

要为多个textField执行此操作,您需要具有多个textField的出口,然后此方法中的简单if语句将完成此任务。

 @IBOutlet weak var textfield1: UITextField! @IBOutlet weak var textfield2: UITextField! func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { let newLength = textField.text.characters.count + string.characters.count - range.length if textField == textField1 { return newLength <= 10 // Bool } else if textField == textField2 { return newLength <= 15 // Bool } return true } 

为了能够在代码中使用上述方法,包含这些textField的UIViewController将需要实现UITextFieldDelegate协议,然后将UITextField的委托属性设置为UIViewController

还有关于count方法。 它已经多次更新。 要计算字符串的字符数:

在Swift1.2之前- > countElements(string)
Swift1.2 - > count(string)
Swift2 - > string.characters.count

从这个答案: 设置UITextField的最大字符长度

虽然UITextField类没有max length属性,但通过设置文本字段的委托并实现以下委托方法来获得此function相对简单:

Objective-C的

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { // Prevent crashing undo bug – see note below. if(range.length + range.location > textField.text.length) { return NO; } NSUInteger newLength = [textField.text length] + [string length] - range.length; return newLength <= 25; } 

迅速

 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { let currentCharacterCount = textField.text?.characters.count ?? 0 if (range.length + range.location > currentCharacterCount){ return false } let newLength = currentCharacterCount + string.characters.count - range.length return newLength <= 25 } 

编辑

这是一个基于评论的更新的swift方法。

 // assume you have the following 3 fields let textField1 = UITextField() let textField2 = UITextField() let textField3 = UITextField() // then declare this dictionary let lengthsDictionary = [textField1 : 10, textField2: 20, textField3: 30] func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { guard let length = lengthsDictionary[textField] else { return true } let currentCharacterCount = textField.text?.characters.count ?? 0 if (range.length + range.location > currentCharacterCount){ return false } let newLength = currentCharacterCount + string.characters.count - range.length return newLength <= length } 

如果要对多个文本字段的章程应用限制,请在IB中设置标记值。 例如,您需要2个文本字段,文本限制为3,4,因此为各个文本字段设置3和4标记,并在shouldChangeCharactersInRange方法中添加以下代码

 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { let characterCount = textField.text?.characters.count ?? 0 if (range.length + range.location > characterCount){ return false } let newLength = characterCount + string.characters.count - range.length return newLength <= textField.tag }