xcode - 当用户在 Swift 中输入 2 个字符时将焦点设置在下一个文本字段上

标签 xcode swift focus

我正在拼命寻找可以回答我问题的人。 我有一个包含 4 个文本字段的表单。我希望当用户输入 2 个字符时,焦点会自动设置在下一个 TextField 上。

我尝试了以下代码:

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


    if (text.characters.count == 2 && textField.tag == 10){
        textField.resignFirstResponder()
        self.txt_min_debut.becomeFirstResponder()
        return false
    }

    else if (text.characters.count == 2 && textField.tag == 11){
        textField.resignFirstResponder()
        self.txt_heure_fin.becomeFirstResponder()
        return false
    }

    else if (text.characters.count == 2 && textField.tag == 12){
        textField.resignFirstResponder()
        self.txt_min_fin.becomeFirstResponder()
        return false
    }

    else if (text.characters.count == 2 && textField.tag == 13){
        textField.resignFirstResponder()
        self.txt_cr.becomeFirstResponder()
        return false
    }

它不像我想要的那样工作。当我输入 2 个字符时,焦点仍然位于同一个 TextField 上。我必须输入第三个字符才能继续下一个字符。 另一个问题是del键被识别为键。这意味着,当我输入 2 个字符时,我无法再次编辑它。

我正在使用 Xcode 和 Swift 2。

最佳答案

更新了 SWIFT3 代码

@IBOutlet weak var tf1: UITextField!
@IBOutlet weak var tf2: UITextField!
@IBOutlet weak var tf3: UITextField!
@IBOutlet weak var tf4: UITextField!
override func viewDidLoad() {
    super.viewDidLoad()
    tf1.delegate = self
    tf2.delegate = self
    tf3.delegate = self
    tf4.delegate = self


    tf1.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
    tf2.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
    tf3.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)
    tf4.addTarget(self, action: #selector(self.textFieldDidChange(textField:)), for: UIControlEvents.editingChanged)

}
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    tf1.becomeFirstResponder()

}
func textFieldDidChange(textField: UITextField){

    let text = textField.text

    if text?.utf16.count==2{
        switch textField{
        case tf1:
            tf2.becomeFirstResponder()
        case tf2:
            tf3.becomeFirstResponder()
        case tf3:
            tf4.becomeFirstResponder()
        case tf4:
            tf4.resignFirstResponder()
        default:
            break
        }
    }else{

    }
}

关于xcode - 当用户在 Swift 中输入 2 个字符时将焦点设置在下一个文本字段上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35744854/

相关文章:

javascript - 如何锁定文本区域的第一个词?

Java Swing : how to stop unwanted shift-tab keystroke action

ios - 在 App 中使用的 GameCenter 图标

c++ - 为什么 min() 在 Xcode 中有效,而 max() 无效?

c++ - 使用 C++ 引用此函数的正确方法是什么?

ios - 如何使用 didSelectRowAtIndexPath(在 Swift 中)在两个 Storyboard 之间传递日期?

ios - 为什么我们可以从 didSet 属性观察者返回

ios - 如何在 MKAnnotation swift 中添加额外的属性

java - 防止 Java Swing JTable 在输入无效数据时失去焦点

iphone - 如何降级 Xcode?