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

str*_*ong 3 objective-c uitextview uitextviewdelegate ios

我拖了一个UITextView和挂钩委托File's Owner.
textViewDidChange仅使用默认的键盘调用,但没有从我的键盘发生时输入文本.

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

这是我的代码

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);
    }
Run Code Online (Sandbox Code Playgroud)

MyKeyboard.h

@interface MyKeyboard : UIView
@property (weak,nonatomic) id<UITextInput> textView;
-(void)setTextView:(id<UITextInput>)textView;
@end
Run Code Online (Sandbox Code Playgroud)

MyKeyboard.m

 -(void)setTextView:(id<UITextInput>)textView{
        _textView = textView;
        if ([textView isKindOfClass:[UITextView class]])
            [(UITextView *)textView setInputView:self];
        else if ([textView isKindOfClass:[UITextField class]])
            [(UITextField *)textView setInputView:self];
    }
Run Code Online (Sandbox Code Playgroud)

Art*_*eel 8

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

textViewDidChange:
讨论

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

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