更改UITextView.inputView时是不是调用了textViewDidChange?

我拖动UITextView并使用File's Owner挂起委托。
textViewDidChange仅使用默认键盘调用,但是当我从键盘输入文本时没有任何反应。

如何在将inputView设置为自定义键盘时启用UITextView委托?

这是我的代码

ViewController.m

 -(void)viewDidLoad{ self.myKeyboard = [[[NSBundle mainBundle] loadNibNamed:@"MyKeyboard" owner:nil options:nil] objectAtIndex:0]; [self.myKeyboard setTextView:self.textView]; } #pragma mark TestViewDelegate - (void)textViewDidChange:(UITextView *)textView{ NSLog(@"TextDidChange: %@",textView.text); } 

MyKeyboard.h

 @interface MyKeyboard : UIView @property (weak,nonatomic) id textView; -(void)setTextView:(id)textView; @end 

MyKeyboard.m

  -(void)setTextView:(id)textView{ _textView = textView; if ([textView isKindOfClass:[UITextView class]]) [(UITextView *)textView setInputView:self]; else if ([textView isKindOfClass:[UITextField class]]) [(UITextField *)textView setInputView:self]; } 

在自定义键盘中,您可能使用方法setText:更改setText:文本,但此方法中所做的更改不会调用textViewDidChanged回调。
阅读更多文档 。

textViewDidChange:
讨论

文本视图调用此方法以响应用户启动的文本更改。 不响应以编程方式启动的更改而调用此方法。

因此,您应该从键盘手动调用此方法。