ios - 在 TextField iOS 中按退格键/删除键

标签 ios swift uitextfield

我正在尝试使用它,以便当用户在输入 PIN 码时按下“退格/删除”按钮时,它会转到并删除“上一个”文本字段。我在 SO 上看到了其他解决方案,函数 keyboardInputShouldDelete 似乎很有希望,但它没有用。任何帮助是极大的赞赏。下面是我的代码:

     func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

            if ((textField.text?.count)! < 1) && (string.count > 0) {

                if textField == txtOTP1 {

                    txtOTP2.becomeFirstResponder()
                }

                if textField == txtOTP2 {

                    txtOTP3.becomeFirstResponder()
                }
                if textField == txtOTP3 {

                    txtOTP4.becomeFirstResponder()

                }
                if textField == txtOTP4 {

                    check()

                }

                textField.text = string

                userPIN = "\(self.txtOTP1.text!)\(self.txtOTP2.text!)\(self.txtOTP3.text!)\(self.txtOTP4.text!)"

                return false

            } else if ((textField.text?.count)! >= 1) && (string.count == 0) {

                if textField == txtOTP4 {

                    txtOTP3.becomeFirstResponder()
                }

               if textField == txtOTP3 {

                    txtOTP2.becomeFirstResponder()

                }

              if textField == txtOTP2 {

                    txtOTP1.becomeFirstResponder()

                }

               if textField == txtOTP1 {

                }

                textField.text = ""

                return false

            }

            else if (textField.text?.count)! >= 1 {

                textField.text = string

                return false
            }

            return true

        }

 func keyboardInputShouldDelete(_ textField: UITextField) -> Bool {

        textField.delegate = self

        return true
    }

最佳答案

尝试这样做:

//Get new length of the text after input
let newLength = (textField.text ?? "").count + string.count - range.length
if newLength == 0 {
    //Go back prev textfield if new length is 0
}

为了克服 shouldChangeCharactersIn 不会在空字段上被调用的问题,只需将用户输入的最后一个字符从上一个文本字段带到下一个文本字段,这样用户就永远不会有空字段第一个文本框。

另一种方法是默认为每个文本字段添加一个空格字符并在其周围进行检测,但处理起来似乎更烦人。

关于ios - 在 TextField iOS 中按退格键/删除键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51855640/

相关文章:

ios - PFQuery 约束——排除子查询

ios - 如何在不从 Swift 中的 xib 加载的情况下添加可重用 View ?

xcode - swift Xcode 6 : How do I use multiple functions in one statement?

iphone - 将 View Controller 推送到导航 Controller 时 UI 阻塞

ios - UINavigationController 方法将 View Controller 添加到导航堆栈?

ios - AFNetworking 异步任务 iOS 的返回值

ios - 在 Swift 中获取多个触摸的坐标

Swift 从小到大的导航栏标题跳跃过渡

objective-c - resignFirstResponder 没有在 textFieldShouldClear 中被调用

swift - 如何区分自定义单元格中的两个文本字段?