5

我拖动一个UITextView并将委托与File's Owner.
仅使用textViewDidChange默认键盘调用,但从我的键盘输入文本时没有任何反应。

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

这是我的代码

视图控制器.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);
    }

我的键盘.h

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

我的键盘.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];
    }
4

1 回答 1

12

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

textViewDidChange:
讨论

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

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

于 2014-03-24T15:06:42.053 回答