Le délégué UITextView n'a jamais été appelé

J'ai un délégué UITextview - (BOOL)textView:(UITextView *)textView qui n'est jamais appelé et j'ai lutté avec cela pendant quelques jours en vain. Voici ce que j'ai

J'ai déclaré le <UITextViewDelegate> dans mon file d'en-tête et dans ViewDidLoad je mets le délégué, j'ai essayé self.myTextView.delegate = self; et myTextView.delegate = self; avec le câblage du délégué dans le file NIB au lieu de le déclarer par programmation.

J'ai quelques buttons personnalisés qui insèrent le text dans mon UITextView par 2 methods différentes selon le button, la première méthode ici est …

 -(IBAction)ssortingng1:(id)sender { NSRange range = myTextView.selectedRange; NSSsortingng * firstHalfSsortingng = [myTextView.text subssortingngToIndex:range.location]; NSSsortingng * secondHalfSsortingng = [myTextView.text subssortingngFromIndex: range.location]; myTextView.scrollEnabled = NO; NSSsortingng * insertingSsortingng = [NSSsortingng ssortingngWithFormat:@"insert my text ssortingng"]; myTextView.text = [NSSsortingng ssortingngWithFormat: @"%@%@%@", firstHalfSsortingng, insertingSsortingng, secondHalfSsortingng]; range.location += [insertingSsortingng length]; myTextView.selectedRange = range; myTextView.scrollEnabled = YES;} 

et la deuxième méthode est …

 -(IBAction)ssortingng2:(id)sender { myTextView.text = [myTextView.text ssortingngByAppendingSsortingng:@"my other ssortingng value"];} 

Avec NSLog allumé, je peux voir que

 - (void)textViewDidChange:(UITextView *)textView{ NSLog(@"something changed");} 

est appelé, mais ce délégué ne se fait jamais appeler

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSSsortingng *)text { NSUInteger newLength = (textView.text.length - range.length) + text.length; if(newLength <= MAX_LENGTH) { return YES; } else { NSUInteger emptySpace = MAX_LENGTH - (textView.text.length - range.length); textView.text = [[[textView.text subssortingngToIndex:range.location] ssortingngByAppendingSsortingng:[text subssortingngToIndex:emptySpace]] ssortingngByAppendingSsortingng:[textView.text subssortingngFromIndex:(range.location + range.length)]]; return NO; } NSLog(@"something else changed");} 

En haut de mon file .M j'ai défini #define MAX_LENGTH 100

Toute aide serait très appréciée, mon objective global est de limiter le nombre de charters dans UITextView.

UITextView envoie uniquement textView:shouldChangeTextInRange:replacementText: à son délégué en réponse aux events de l'user. Il n'envoie pas ce message lorsque votre programme définit la propriété myTextView.text .

Je suis surpris que l' UITextView envoie textViewDidChange: au délégué, puisque la documentation dit "Cette méthode n'est pas appelée en réponse aux changements initiés par programme."

Ainsi, vous pouvez textViewDidChange: le text dans textViewDidChange: place (et se fier à son comportement différent de la documentation), ou modifier et ssortingng1: et ssortingng2: pour couper le text.