在我的应用程序中,我有 2 个文本字段。 taskTextField 和 DescTextField。我想将任务文本字段的字符限制为 15,将描述文本字段的字符限制为 20。我已经设法限制了两者,但我不知道如何分别进行。这是我的代码:
let limitLength = 20
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
return newLength <= limitLength
}
有关如何为每个文本字段设置单独限制的任何帮助将不胜感激。
-
为每个
UITextField
添加一个标记:let taskTextFieldTag = 100 let DescTextFieldTag = 101 override func viewDidLoad() { // .. taskTextField.tag = taskTextFieldTag DescTextField.tag = DescTextFieldTag // ... }
-
在
UITextFieldDelegate
:func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { guard let text = textField.text else { return false } let newLength = text.utf16.count + string.utf16.count - range.length var maxLength = 0 switch textField.tag { case taskTextFieldTag: maxLength = 15 case DescTextFieldTag: maxLength = 20 default: break } return newLength <= maxLength }
基于您的代码,假设您可以通过 IBOutlet 将文本字段连接到您的代码
@IBOutlet weak var taskTextField: UITextField!
@IBOutlet weak var descTextField: UITextField!
let taskTextFieldlimitLength = 15
let descTextFieldlimitLength = 20
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
switch textField {
case taskTextField:
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
return newLength <= taskTextFieldlimitLength
case descTextField:
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
return newLength <= descTextFieldlimitLength
default:
return true
}
}