UITextView委托从未调用

我有一个UITextview委托- (BOOL)textView:(UITextView *)textView textView - (BOOL)textView:(UITextView *)textView textView永远不会被调用,我一直在挣扎了这一连串的几天无济于事。 这是我的

我已经在我的头文件和ViewDidLoad中声明了<UITextViewDelegate>我设置了委托,我试过self.myTextView.delegate = self;myTextView.delegate = self; 同时在NIB文件中连接委托,而不是以编程方式声明它。

我有几个自定义的button,通过2种不同的方法插入到我的UITextView取决于button,这里的第一种方法是…

 -(IBAction)string1:(id)sender { NSRange range = myTextView.selectedRange; NSString * firstHalfString = [myTextView.text substringToIndex:range.location]; NSString * secondHalfString = [myTextView.text substringFromIndex: range.location]; myTextView.scrollEnabled = NO; NSString * insertingString = [NSString stringWithFormat:@"insert my text string"]; myTextView.text = [NSString stringWithFormat: @"%@%@%@", firstHalfString, insertingString, secondHalfString]; range.location += [insertingString length]; myTextView.selectedRange = range; myTextView.scrollEnabled = YES;} 

第二种方法是…

 -(IBAction)string2:(id)sender { myTextView.text = [myTextView.text stringByAppendingString:@"my other string value"];} 

随着NSLog打开,我可以看到

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

确实被调用,但这个委托永远不会被调用

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)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 substringToIndex:range.location] stringByAppendingString:[text substringToIndex:emptySpace]] stringByAppendingString:[textView.text substringFromIndex:(range.location + range.length)]]; return NO; } NSLog(@"something else changed");} 

在.M文件的顶部,我定义了#define MAX_LENGTH 100

任何帮助将非常感激,我的总体目标是限制在UITextView章程的数量。

UITextView只响应用户事件发送textView:shouldChangeTextInRange:replacementText:到它的委托。 当程序设置myTextView.text属性时,它不会发送该消息。

我很惊讶, UITextView正在发送textViewDidChange:给委托,因为文档说“这个方法不响应程序启动的变化调用”。

因此,您可以剪切textViewDidChange:的文本textViewDidChange:取而代之(并且依赖于其行为与文档不同),或者修改string1:string2:剪辑文本。