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

时间:2013-04-20 00:39:58

标签: ios objective-c uitextview uitextviewdelegate

我拖动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 个答案:

答案 0 :(得分:8)

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

  

<强> textViewDidChange:
  讨论

     

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

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