web-dev-qa-db-fra.com

iOS TextField - la saisie semi-automatique ajoute un caractère vierge

J'ai un problème avec un UITextField. Lorsque l'option de saisie semi-automatique est activée, je peux sélectionner un email dans la liste, mais iOS ajoute automatiquement un espace vide à la fin du champ de texte. 

Est-ce un bug iOS ou est-ce que je peux faire quelque chose pour empêcher cela? P.S. Je sais que je peux gérer les modifications de texte et supprimer les espaces vides de la fin de la chaîne, mais je recherche la méthode native.

 enter image description here  enter image description here

6
Vladimir Dinic

Le comportement par défaut de la suggestion intelligente consiste à ajouter un espace vide après le texte fourni de sorte que, si vous écrivez une phrase, vous ne soyez pas obligé de toucher l'espace après avoir sélectionné la suggestion.

Je recommanderais de supprimer les espaces ainsi même si l'utilisateur essayait de le saisir, il serait jeté.

Vous pouvez le faire en modifiant le texte par programme après l'avoir modifié:

Ajouter une cible à votre champ de texte dans la viewDidLoad du contrôleur 

textField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)

@objc func textFieldDidChange(_ textField: UITextField) {

    let text = textField.text ?? ""

    let trimmedText = text.trimmingCharacters(in: .whitespaces)

    textField.text = trimmedText
}
4
zombie

Je n'ai pas trouvé le moyen de résoudre ce problème. Honnêtement, je n'ai pas passé beaucoup de temps. Je travaille toujours sur un projet et j'ai donc laissé ce problème en attente car je travaille sur d'autres fonctionnalités. Nous pouvons considérer cela comme un bogue Apple. Btw, le champ de texte email offre un moyen de saisir un espace, je ne sais pas pourquoi, car les adresses email ne contiennent pas de caractères vides. Pour le moment, j'ai une idée pour résoudre ce problème en corrigeant l'adresse e-mail après l'édition, pas pendant l'édition.

Par exemple, je peux accepter cet e-mail avec un caractère vide comme saisie à partir de la saisie semi-automatique, mais lorsque je sauvegarde cet e-mail ou si je l'envoie à cette adresse, je peux supprimer cet espace.

0
Vladimir Dinic