appel à deuxChangerCharacteresInRange deux fois

Parfois, shouldChangeCharactersInRange est appelé deux fois lorsque je frappe un seul caractère.

Par exemple, je tape 'avion par c', la procédure est appelée et j'ajoute un second 'c' le résultat est 'avion par cc' – Comment puis-je éviter cela?

Cela est arrivé seulement depuis que je migre l'application vers iOS 7, xCode 5.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementSsortingng:(NSSsortingng *)ssortingng { wordSearching = YES; if ([ssortingng isEqualToSsortingng:@"\n"]) { [self textFieldDoneEditing]; return NO; } if ([ssortingng isFirstCharacterPunctuation]) { NSLog(@"punctuation detected"); [self replaceWordEditedByFirstSuggestion]; [self hideSuggestions]; return YES; } NSLog(@"Search : %@", ssortingng); //NSLog(@"textField : %@", textField); NSLog(@"self : %@", self.textEdited); ssortingng = [ssortingng lowercaseSsortingng]; self.textEdited = [[NSSsortingng ssortingngWithSsortingng:textField.text] lowercaseSsortingng]; self.textEdited = [textEdited ssortingngByReplacingCharactersInRange:range withSsortingng:ssortingng]; indexEdition = MIN(range.location + 1, [textEdited length]); self.wordEdited = [textEdited wordAtIndex:indexEdition]; NSLog(@"editing at [%d '%@' '%@' '%@']", indexEdition, wordEdited, ssortingng, textEdited); if ([self canBeDirectAccess:textField.text]) { //[self hideSuggestions]; NSLog(@"Direct Access"); return YES; } [self updateSuggestionsFor:wordEdited]; return YES; } 

Cette routine est appelée avant que les caractères ne soient ajoutés à la string, juste pour vérifier si les caractères sont autorisés, etc.

Vous ajoutez manuellement les caractères au champ de text. Ce n'est pas nécessaire, vous obtenez cette fonctionnalité déléguée. La seule chose que vous devez faire dans votre code est de returnner OUI ou NON.