想要在文本字段编辑期间按下键盘后退按钮时知道任何时间ios

时间:2017-03-07 07:15:08

标签: ios swift swift3 keyboard uitextfield

在OTP中,使用了四个文本字段。按住键盘后退按钮的同时将光标移动到上一个文本字段?

3 个答案:

答案 0 :(得分:2)

  

要检测UITextField中的退格事件,首先需要为UITextField设置委托并将其设置为self。

 class ViewController: UIViewController,UITextFieldDelegate

 self.textField.delegate = self
  

然后使用下面的委托方法检测是否按下了退格键

     

func textField(_ textField:UITextField,shouldChangeCharactersIn范围:NSRange,replacementString string:String) - >布尔{

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

    let char = string.cString(using: String.Encoding.utf8)
    let isBackSpace: Int = Int(strcmp(char, "\u{8}"))
    if isBackSpace == -8 {
        print("Backspace was pressed")
    }
            return true
}
  

基本上,此方法会检测您按下的按钮(或刚刚按下的按钮)。此输入作为NSString输入。我们将此NSString转换为C char类型,然后将其与传统的退格符(\ u {8})进行比较。然后,如果此strcmp等于-8,我们可以将其检测为退格。

选择2

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

    if (string.characters.count ) == 0 {
        //Delete any cases
        if range.length > 1 {
            //Delete whole word
        }
        else if range.length == 1 {
            //Delete single letter
        }
        else if range.length == 0 {
            //Tap delete key when textField empty
        }
    }
   return true
 }

答案 1 :(得分:2)

创建UITextField的子类。然后覆盖deleteBackward方法。最后,通过确认delegate协议,使自定义BackSpaceDelegate检测目标类中的退格。这里给你一个演示:

protocol BackSpaceDelegate {
    func deleteBackWord(textField: CustomTextField)
}

class CustomTextField: UITextField {
    var backSpaceDelegate: BackSpaceDelegate?
    override func deleteBackward() {
        super.deleteBackward()
        // called when textfield is empty. you can customize yourself.
        if text?.isEmpty ?? false {
             backSpaceDelegate?.deleteBackWord(textField: self)
        }
    }
}
class YourViewController: UIViewController, BackSpaceDelegate {

    func deleteBackWord(textField: CustomTextField) {
        /// do your stuff here. That means resign or become first responder your expected textfield.
    }
}

希望这会对你有所帮助。

答案 2 :(得分:0)

检查textFieldShouldChangeTextInRange中的'string'参数(你得到了名字,不是吗?)。如果它为空,则点击“退格”按钮。

如果'string'参数和文本字段的'text'属性都为空,则可以移动到上一个文本字段。