2013-04-20 71 views
0

我拖動UITextView,並與File's Owner掛鉤委託。
textViewDidChange僅用默認鍵盤調用,但從鍵盤輸入文本時不會發生任何操作。更改UITextView.inputView時不調用textViewDidChange?

如何在將inputView設置爲自定義鍵盤時啓用UITextView的代理?

這裏是我的代碼

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

我沒有看到委託設置在任何地方。你運行'textView.delegate = self'嗎? – Logan 2014-03-24 14:53:20

回答

5

在您的自定義鍵盤,你可能變化文本通過使用方法setText:內部textView,但在此方法中所做的更改不會調用textViewDidChanged回調。
瞭解更多documentation

textViewDidChange:
討論

文本視圖調用響應用戶發起的更改 到文本此方法。 此方法不會響應以編程方式發起的更改而調用 。

因此,您應該從鍵盤手動調用此方法。