当用户以编程方式单击swift ios中的删除按钮时,如何将光标从一个文本字段自动移动到另一个文本字段?

Posted

技术标签:

【中文标题】当用户以编程方式单击swift ios中的删除按钮时,如何将光标从一个文本字段自动移动到另一个文本字段?【英文标题】:How to move cursor from one text field to another automatically when the user clicks the Delete Button in swift ios programmatically? 【发布时间】:2018-04-19 21:58:48 【问题描述】:

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

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

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

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

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

我已经被这个问题困扰了一段时间,无法弄清楚如何解决这个问题。

    @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 

        
    

【问题讨论】:

问得好伙计! 感谢@RannLifshitz 对此很困惑哈哈 【参考方案1】:

你可以使用这个:

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 的第一个字母,而是关注两个字母,如果sender.text.count 等于2,则为下一个UITextField 设置第二个数字,如果sender.text.count等于 0 表示用户删除了某些内容(因为我们在 Editing Changed 事件中),我们应该向后移动光标。 并在 if 的第一条语句中为 UI 做所有你想做的事情。 这有点乱,但它有效。

【讨论】:

谢谢你!这有效,但是当我在第一个文本字段中选择键盘上的第一个数字时;在我到达第二个文本字段之前,文本字段不会变成我的黑色背景。知道为什么会这样吗?另外,我怎样才能摆脱 UItextField @arash 上闪烁的蓝线 是的,在光标到达第二个之前,第一个 UITextField 不会变成您的颜色,因为代码执行此操作,您可以更改 viewDidLoad 中第一个 UITextField 的背景颜色并将 firstResponder 设置为首先。要隐藏光标,您可以使用blog.apoorvmote.com/… 虽然对您来说最好的方法是在viewController 中创建虚拟键盘并使用它们而不是使用真正的键盘和UITextField 感谢您的帮助!我想我想通了。非常感谢 欢迎您,如果您接受我的回答,我将不胜感激

以上是关于当用户以编程方式单击swift ios中的删除按钮时,如何将光标从一个文本字段自动移动到另一个文本字段?的主要内容,如果未能解决你的问题,请参考以下文章

当 BLE 在 Swift 中以编程方式连接时,蓝牙设备设置中缺少信息按钮

无法在tableviewcell ios 7上显示删除按钮

在 iOS 7 上以编程方式安装 .mobileconfig 文件

如何在 swift Xcode 中以编程方式绑定/配对蓝牙 LE 设备?

iOS Swift - 如何以编程方式为所有按钮分配默认操作

iOS Swift 3 - 面板点击后删除覆盖 UIView