How to move cursor from one text field to another

2019-07-14 04:32发布

Currently, I have 6 textfields that I am moving from one textfield to the next, once a user clicks a number on the keypad.

The issue I am trying to solve is: If the user clicks the Delete Button to go back to re-enter a different number, how do I code that in a program?

How do I have the user go back to type in a new number on the keypad and also change the textfield back to its original code?

I would like for the user to be able to type in on the keypad one number in the 6 fields and then have the user be able to click the Delete Button to go back and re-enter the number. I would like the user to have to click the Delete Button.

Also, how do I get rid of the blinking blue line in the UItextfield?

I have been stuck on this problem for awhile now and can't figure out how to solve this.

    @objc func textFieldDidChange(textfield: UITextField) {
        let text = textfield.text
        if text?.utf16.count == 1 {
            switch textfield {
            case textfield1:
                textfield1.backgroundColor = UIColor.black
                textfield1.textColor = .white
                textfield2.becomeFirstResponder()
                textfield2.backgroundColor = UIColor.black
                textfield2.textColor = .white
            case textfield2:
                textfield3.becomeFirstResponder()
                textfield3.backgroundColor = UIColor.black
                textfield3.textColor = .white
            case textfield3:
                textfield4.becomeFirstResponder()
                textfield4.backgroundColor = UIColor.black
                textfield4.textColor = .white
            case textfield4:
                textfield5.becomeFirstResponder()
                textfield5.backgroundColor = UIColor.black
                textfield5.textColor = .white
            case textfield5:
                textfield6.becomeFirstResponder()
                textfield6.backgroundColor = UIColor.black
                textfield6.textColor = .white
            case textfield6:
                textfield6.resignFirstResponder()
            default:
                break
            }
        }
        else {

        }
    }

1条回答
我欲成王,谁敢阻挡
2楼-- · 2019-07-14 04:45

You can use this:

func textFieldDidChange(textField: UITextField) {
    let text = textField.text!
    if text.utf16.count == 0 {
        switch textField {
        case textField2:
            textField1.becomeFirstResponder()
        case textField3:
            textField2.becomeFirstResponder()
        case textField4:
            textField3.becomeFirstResponder()
        case textField5:
            textField4.becomeFirstResponder()
        case textField6:
            textField5.becomeFirstResponder()
        default:
            break
        }
    } else if text.utf16.count == 2 {
        let indexStartOfText = text.index(text.startIndex, offsetBy: 1)
        textField.text = String(text[..<indexStartOfText])
        let tempStr = String(text[indexStartOfText])
        switch textField {
        case textField1:
            textField1.backgroundColor = UIColor.black
            textField1.textColor = .white
            textField2.becomeFirstResponder()
            textField2.backgroundColor = UIColor.black
            textField2.textColor = .white
            textField2.text = tempStr
        case textField2:
            textField3.becomeFirstResponder()
            textField3.backgroundColor = UIColor.black
            textField3.textColor = .white
            textField3.text = tempStr
        case textField3:
            textField4.becomeFirstResponder()
            textField4.backgroundColor = UIColor.black
            textField4.textColor = .white
            textField4.text = tempStr
        case textField4:
            textField5.becomeFirstResponder()
            textField5.backgroundColor = UIColor.black
            textField5.textColor = .white
            textField5.text = tempStr
        case textField5:
            textField6.becomeFirstResponder()
            textField6.backgroundColor = UIColor.black
            textField6.textColor = .white
            textField6.text = tempStr
        case textField6:
            textField6.resignFirstResponder()
        default:
            break
        }
    }
}

In this code you will never focus on the 1 letter of UITextFields instead you focus on 2 letters, if the sender.text.count equals to 2 you set the second number for the next UITextField, and If sender.text.count equals to zero it means user has deleted something (because we are in Editing Changed event)and we should backward the cursor.
And do everything you want for UI in the first statement of if.
It's a little messy but it works.

查看更多
登录 后发表回答