在 2 个单独的文本字段中移动字符 swift 3.



在我的应用程序中,我有 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
}

有关如何为每个文本字段设置单独限制的任何帮助将不胜感激。

  1. 为每个UITextField添加一个标记:

    let taskTextFieldTag = 100
    let DescTextFieldTag = 101
    override func viewDidLoad() {
         // ..
         taskTextField.tag = taskTextFieldTag
         DescTextField.tag = DescTextFieldTag
         // ...
    }
    
  2. 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
        }
    }

最新更新