veux savoir tout le time tout en appuyant sur le button de return du keyboard au cours de l'édition du champ de text ios

Dans OTP, il y a quatre champs de text ont été utilisés. Déplacer le slider sur le champ de text précédent tout en appuyant sur le button de return du keyboard?

Pour détecter l'événement backspace dans un UITextField, vous devez d'abord définir un délégué pour UITextField et le définir sur self.

class ViewController: UIViewController,UITextFieldDelegate self.textField.delegate = self 

Ensuite, vous utilisez la méthode déléguée ci-dessous pour détecter si un espace arrière a été pressé

func textField (_ textField: UITextField, shouldChangeCharactersIn plage: NSRange, string_sem rlocation: Ssortingng) -> Bool {

  func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementSsortingng ssortingng: Ssortingng) -> Bool { let char = ssortingng.cSsortingng(using: Ssortingng.Encoding.utf8) let isBackSpace: Int = Int(strcmp(char, "\u{8}")) if isBackSpace == -8 { print("Backspace was pressed") } return true } 

Fondamentalement, cette méthode détecte le button que vous appuyez (ou que vous venez d'appuyer). Cette input vient en tant que NSSsortingng. Nous convertissons ce NSSsortingng en un type de caractère C, puis le comparons au caractère de return arrière traditionnel (\ u {8}). Alors, si ce strcmp est égal à -8, nous pouvons le détecter comme un return arrière.

choix 2

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementSsortingng ssortingng: Ssortingng) -> Bool { if (ssortingng.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 } 

Vérifiez le paramètre 'ssortingng' dans textFieldShouldChangeTextInRange (vous avez le nom, n'est-ce pas?). S'il est vide, le button 'return arrière' a été tapé.

Si à la fois le paramètre "string" et la propriété "text" du champ de text sont vides, vous pouvez passer au champ de text précédent.

Pour détecter l'événement backspace dans un UITextField, vous devez d'abord configurer un délégué pour UITextField et le définir sur self.

 class ViewController: UIViewController,UITextFieldDelegate self.textField.delegate = self 

Alors essayez ceci

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementSsortingng ssortingng: Ssortingng) -> Bool { let nsSsortingng = textField.text as NSSsortingng? let newSsortingng = nsSsortingng?.replacingCharacters(in: range, with: ssortingng) let isPressedBackspace = ssortingng == "" && newSsortingng == "" && range.location == 0 && range.length == 1 if isPressedBackspace { textField.resignFirstResponder() previousTxtField.becomeFirstResponder() } } 

Créez une sous-class de UITextField . Puis remplacez la méthode deleteBackward . Enfin, créez un delegate personnalisé pour détecter le return arrière dans votre class cible en confirmant le protocole BackSpaceDelegate . Ici vous donne une démo:

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

J'espère que ceci vous aidera.