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:
обсуждениеТекстовое представление вызывает этот метод в ответ на инициированные пользователем изменения в тексте. Этот метод не вызывается в ответ на программно инициированные изменения.
Таким образом, вы должны вручную вызвать этот метод с клавиатуры.