在UITextView上调用UIKeyboard方法,而不是在UITextFields上调用

问题描述:

我在UITextView上查看底部的注释。从页面底部开始,每当有人编辑它时,都会调用一个方法来移动页面的视图,以便您仍然可以看到评论框。我的问题是,当用户正在编辑UITextFields时,同样的方法也会被调用。在UITextView上调用UIKeyboard方法,而不是在UITextFields上调用

这是我的。首先我宣布一个通知:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(keyboardWillShow:) 
              name:UIKeyboardWillShowNotification 
              object:self.view.window]; 

然后,该方法本身

- (void)keyboardWillShow:(NSNotification *)notif{ 

... 

} 

我首先想到的是添加一个条件,检查,看看如果对象是一个TextView,然后才执行代码。但是由于我没有将对象传递给方法,是否有告诉方法我正在处理的对象类型

文本字段和文本视图也会发送通知。在textFieldShouldBeginEditing和textViewShouldBeginEditing实现中,您可以设置一个标志,您可以在执行keyboardWillShow方法时读取该标志 - 键盘通知在文本字段或文本视图通知之后发送。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    self.sender = @"text field"; 
    return YES; 
} 


- (BOOL)textViewShouldBeginEditing:(UITextView *)textView { 
    self.sender = @"text view"; 
    return YES; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWillShow:) 
               name:UIKeyboardWillShowNotification 
               object:self.view.window]; 

} 

- (void)keyboardWillShow:(NSNotification *)notif{ 
    NSLog(@"%@",self.sender); 
} 
+0

'self.sender'正在寻找一个变量类变量,而不是你传递给函数的参数。这是你的意图吗? – BloonsTowerDefence 2012-07-17 15:02:04

+0

我不确定你的意思。发件人(也许这是一个很差的选择名称),只是我在视图控制器的.h文件中声明的属性。这不适合你吗?我测试了它,它对我来说确实很好。 – rdelmar 2012-07-17 15:16:22

+0

textview一个不适合我...为什么你有参数作为TextView的文本框(我已经尝试过这两种方式,但没有运气)。 – BloonsTowerDefence 2012-07-17 15:35:29