Longueur Max UITextField
Quand je l'ai essayé Comment vous définissez le nombre maximum de caractères qui peuvent être entrés dans un UITextField l'utilisation de swift?, j'ai vu que si j'utilise tous les 10 caractères, je ne peux pas effacer le caractère trop.
La seule chose que je puisse faire est d'annuler l'opération (suppression de tous les personnages).
Personne ne sait comment faire pour ne pas bloquer le clavier (de sorte que je ne peux pas ajouter d'autres lettres/symboles/nombres, mais je peux utiliser la touche retour arrière)?
Vous devez vous connecter pour publier un commentaire.
Avec Swift 5 et iOS 12, essayez ce qui suit la mise en œuvre de
textField(_:shouldChangeCharactersIn:replacementString:)
méthode qui fait partie de laUITextFieldDelegate
protocole:range
(NSRange
) àrangeOfTextToReplace
(Range<String.Index>
). Voir ce tutoriel vidéo de comprendre pourquoi cette conversion est important.textField
'ssmartInsertDeleteType
de la valeur àUITextSmartInsertDeleteType.no
. Cela permettra d'éviter l'insertion éventuelle d'un (indésirables) de l'espace supplémentaire lors de l'exécution d'une opération de collage.L'intégralité de l'exemple de code suivant montre comment mettre en œuvre
textField(_:shouldChangeCharactersIn:replacementString:)
dans unUIViewController
:text.characters.count
est déconseillé d'utilisertext.count
Je fais comme ça:
Le code fonctionne pour moi. Mais je travaille avec storyboard. En Storyboard-je ajouter une action pour le champ de texte dans la vue contrôleur sur édition changé.
Mise à jour pour Swift 4
Ajouter Plus de détails à partir de @Martin réponse
un petit changement pour IOS 9
Dans Swift 4
10 limite de Caractères pour le champ de texte et permettent d'effacer(backspace)
Swift 3
J'ai posté une solution à l'aide de
IBInspectable
, de sorte que vous pouvez changer la longueur maximum de la valeur à la fois dans interface builder ou par programmation. Découvrez-le iciSi vous souhaitez remplacer la dernière lettre:
Méfiez-vous de l'annulation de bug pour objet UITextField mentionné dans ce post: Définissez le nombre maximal de caractères d'un objet UITextField
ici est de savoir comment vous fixer dans swift
J'ai été en utilisant ce protocole /extension dans une de mes applications, et c'est un peu plus lisible. J'aime la façon dont il reconnaît correction arrière et explicitement de vous indique lorsqu'un caractère est un retour arrière.
Certaines choses à considérer:
1.Ce que met en œuvre cette extension du protocole besoin de spécifier une limite de caractères. C'est généralement va être votre ViewController, mais vous pourriez mettre en œuvre limite de caractères comme une propriété calculée et retour quelque chose d'autre, par exemple une limite de caractères sur l'un de vos modèles.
2. Vous aurez besoin d'appeler cette méthode à l'intérieur de votre champ de texte shouldChangeCharactersInRange méthode du délégué. Sinon, vous ne serez pas en mesure de bloquer l'entrée de texte, en retournant false, etc.
3. Vous voudrez probablement pour permettre à des caractères à l'aide de la touche retour arrière. C'est pourquoi j'ai ajouté la fonction supplémentaire pour détecter correction arrière. Votre shouldChangeCharacters méthode peut le vérifier et retourner le "vrai" début afin de toujours permettre la correction arrière.
Si vous êtes intéressé, j'ai un dépôt Github où j'ai pris quelques-uns de cette limite de caractères comportement et les mettre dans un iOS cadre. Il y a un protocole, vous pouvez mettre en œuvre pour obtenir un Twitter-like limite de caractères d'affichage qui vous montre comment beaucoup vous êtes allé au-dessus de la limite de caractères.
CharacterLimited Cadre sur Github
Depuis les délégués sont une 1-de-1 relation et que je veuille l'utiliser ailleurs pour d'autres raisons, je tiens à restreindre le champ longueur de l'ajout de ce code à l'intérieur de leur installation:
Vous devez vérifier si la chaîne existante en plus l'entrée est supérieure à 10.