textViewDidChange не вызывается при изменении UITextView.inputView?

Я тащу 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);
    }

MyKeyboard.h

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

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];
    }

1 ответ

В вашей пользовательской клавиатуре вы, вероятно, измените текст внутри textView используя метод setText:, но изменения, сделанные в этом методе, не вызывают textViewDidChanged Перезвоните.
Подробнее читайте в документации.

textViewDidChange:
обсуждение

Текстовое представление вызывает этот метод в ответ на инициированные пользователем изменения в тексте. Этот метод не вызывается в ответ на программно инициированные изменения.

Таким образом, вы должны вручную вызвать этот метод с клавиатуры.

Другие вопросы по тегам