Swift:如果用户达到最大字符数,如何移动到下一个UITextField

问题描述

我正在尝试找到一种方法,当用户达到最大字符数时,文本字段将移至下一个字符。

这是我的代码

extension ViewController: UITextFieldDelegate {
    
    func textField(_ textField: UITextField,shouldChangeCharactersIn range: NSRange,replacementString string: String) -> Bool {
        
        guard let text = textField.text else {
            return true
        }
        let length = text.count + string.count - range.length
        let max = 2
        
        if textField == weTextField {
            return length <= max
        }
        else if textField == theyTextField {
            return length <= max
        }
        
        return true
    }
    
}

谢谢

解决方法

您可以通过执行以下操作来实现:

  1. 创建一个函数,该函数将在达到字符数限制时更改您的第一响应者

      @objc func valueDidChange(_ textField: UITextField) {
         guard let text = textField.text else { return }
         let maxLength = 2
         switch textField {
         case textField1 where text.count == maxLength:
             textField2.becomeFirstResponder()
         case textField2 where text.count == maxLength:
             textField3.becomeFirstResponder()
         default:
             break
         }
     }
    
  2. 将该函数添加到您的文本字段中,以便在编辑文本字段时触发该函数。在上述情况下,我将其添加到textField1和textField2

     textField1.addTarget(self,action: #selector(valueDidChange),for: .editingChanged)
     textField2.addTarget(self,for: .editingChanged)
    

enter image description here