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

Posted

技术标签:

【中文标题】Swift:如果用户达到最大字符,如何移动到下一个 UITextField【英文标题】:Swift: How to move to next UITextField if the user reach max char 【发布时间】:2020-09-25 16:17:03 【问题描述】:

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

这是我的代码:

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
    
    

谢谢

【问题讨论】:

您好,欢迎来到 SO。请为您的问题添加额外的说明,以便我们为您提供帮助 - 您遇到的问题是什么(与预期相比,实际发生了什么)?您采取了哪些故障排除步骤? 我有两个文本字段,用户应该向它们输入数字(最大数字为 2),现在工作正常,如果用户输入两个数字,文本字段代表将不允许他添加更多的。但我想要的是当用户输入 2 位数字(达到最大值)时,它会自动移动到下一个文本字段。谢谢 如果它们也最大化了第二个文本视图,您是否希望它移回第一个文本视图?还是只是从第一个过渡到第二个? 【参考方案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
         
     
    

    将该函数添加到您的文本字段,以便在编辑文本字段时触发它。在上述情况下,我将它添加到 textField1 和 textField2 中

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

【讨论】:

以上是关于Swift:如果用户达到最大字符,如何移动到下一个 UITextField的主要内容,如果未能解决你的问题,请参考以下文章

达到最大长度值后,将下一个输入聚焦

Swift如何跳转到下一个uitextfield [重复]

最大输入后禁用 UITextField 光标移动

如何解决我的提交按钮问题,我无法移动到下一页[重复]

从上到下 Swift 呈现 ViewController

达到字符数后,如何以编程方式将光标从一个 NSTextField 移动到另一个?