当用户以编程方式单击 swift ios 中的删除按钮时,如何自动将光标从一个文本字段移动到另一个文本字段? [英] How to move cursor from one text field to another automatically when the user clicks the Delete Button in swift ios programmatically?

查看:28
本文介绍了当用户以编程方式单击 swift ios 中的删除按钮时,如何自动将光标从一个文本字段移动到另一个文本字段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目前,我有 6 个 textfields,一旦用户单击键盘上的数字,我就会将它们从一个 textfield 移动到下一个.

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

我要解决的问题是:如果用户点击Delete Button返回重新输入不同的数字,我该如何编码程序?

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?

我如何让用户返回以在键盘上输入新号码并将 textfield 更改回其原始代码?

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?

我希望用户能够在键盘上的 6 个字段中输入一个数字,然后让用户能够单击 Delete Button 返回并重新输入号码.我希望用户必须点击删除按钮.

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.

另外,如何去除UItextfield 中闪烁的蓝线?

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 {

        }
    }

推荐答案

你可以使用这个:

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
        }
    }
}

在此代码中,您永远不会关注 UITextFields 的 1 个字母,而是关注 2 个字母,如果 sender.text.count 等于 2,则您设置下一个 UITextField 的第二个数字,如果 sender.text.count 等于 0,则表示用户已删除某些内容(因为我们在 Editing Changed> 事件),我们应该向后移动光标.
并在 if 的第一条语句中为 UI 做你想做的一切.
有点乱,但很管用.

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.

这篇关于当用户以编程方式单击 swift ios 中的删除按钮时,如何自动将光标从一个文本字段移动到另一个文本字段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆