Le problème des chaînes de limitation directement entrées dans un UITEXTVIEW ou UITEXTFIELD a été abordé à ce sujet avant: P>
Cependant, avec OS 3.0 Copy-and-Coller devient un problème, car les solutions dans les questions ci-dessus n'empêchent pas de coller des caractères supplémentaires (c'est-à-dire que vous ne pouvez pas taper plus de 10 caractères dans un champ configuré avec ce qui précède avec ce qui précède. Solutions mais vous pouvez facilement coller 100 caractères dans le même champ). P>
existe-t-il un moyen d'empêcher une chaîne directement entrée
8 Réponses :
Une des réponses dans la première question que vous avez liée ci-dessus doit fonctionner, à savoir utiliser quelque chose comme surveiller les modifications apportées au texte de l'UITEXTFIELD et raccourcissez-la lorsque cela est approprié. < / p> p>
Dans ce cas particulier, conformément à UitextViewDelegate (ou UitextFieldelegate) est préférable de rouler votre propre notification (et plus facile à déboguer). Et je devrais probablement poster comment j'ai effectivement tiré cette question ...
J'ai pu limiter le texte entré et collé en se conformant à TextViewDidChange: méthode dans le protocole UITEXTVIEWELEGATEGATE.
- (void)textViewDidChange:(UITextView *)textView { if (textView.text.length >= 10) { textView.text = [textView.text substringToIndex:10]; } }
Cela provoque un crash lorsque je 'annulerai ". Voir ma réponse pour une solution «légèrement».
Dans mon expérience, implémenter la méthode de déléguée:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
Pas coller si le texte est trop long n'est pas idéal
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ if(string.length>10){ return NO; } return YES; }
Modification du texte après l'inséré dans TextViewDidChange: provoque l'interruption de l'application si l'utilisateur appuie sur "Annuler" après la pâte.
J'ai joué autour d'un peu et j'ai pu obtenir une solution de travail. Fondamentalement, la logique est, ne permettez pas à la pâte si la longueur totale est supérieure aux caractères max, détectez la quantité survolée et insérez uniquement la chaîne partielle. P>
Utilisation de cette solution votre carte de pâte et annulation Travailler comme prévu. p>
Cela peut être fait sans la DISPATCH_ASYNC. DISTATCH_ASYNC provoquera un crash sur iOS8 avec la fonction de nouveau type à venir. Je vais retravailler le code bientôt.
Passage nil comme premier argument à PositionFomposition: Décalage: code> n'est pas autorisé.
Cela crée un crash si vous frappez Redo deux fois. Tout changement pour empêcher ce crash? Merci
De plus, la longueur de la chaîne comme dans '[Longueur de la chaîne]' est une chose, mais on doit souvent tronquer à un nombre d'octets dans un certain codage. J'avais besoin de tronquer la frappe et le coller dans un UITEXTVIEW à un nombre maximum UTF8, voici comment je l'ai fait. (Faire quelque chose de similaire pour Uitextfield est un exercice au lecteur.)
nsstring + troncateTeuf8.h p> nsstring + troncateTeuf8.m p> myViewController.m p>
Merci mec! Cet extrait m'a aidé à comprendre la bonne façon de remplacer le texte dans un champ de texte! J'ai fait une version Swift 3: gist.github.com/blackjacx/2198D86442EC9B9B05C0801F4E392047
Vous pouvez connaître la chaîne colletée si vous recherchez string.length code> dans
DOIGCHANGECHARACTERSIN Plage: Code> Méthode de déléguée
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if string.length > 1 {
//pasted string
// do you stuff like trim
} else {
//typed string
}
return true
}
Pouvez-vous en mettre en œuvre un peu plus clairement., comme si je veux que le champ de texte prenne toujours les lettres de FirSr 6?
@Thaotran pour avoir pris les six premiers chiffres, vous pouvez utiliser string.prefix (6) code> pour prendre les six premiers chiffres de la chaîne collé à l'intérieur de la section
String.length> 1 code> condition.
Ce code ne permettra pas à l'utilisateur de saisir plus de caractères que de MaxCharacters.
La commande Coller ne fera rien, si le texte collé dépassera cette limite.
Dupliqué possible de iPhone SDK: Set Textfield de longueur maximale de caractères