UITextField和键盘通知 - 奇怪的顺序

时间:2013-12-17 14:09:39

标签: ios iphone uitextfield uitextview uikeyboard

所以我已经设置了键盘外观事件的通知。现在让我们考虑一个UITextView和一个UITextField。

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

选择器是:

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

        keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
}

如果是UITextView,则委托方法- (void)textViewDidBeginEditing:(UITextView *)textView将被触发 AFTER keyboardWillShow:方法。所以keyboardSize有键盘的实际大小,我可以在textview委托方法中使用它。

但是在UITextField的情况下,相应的委托方法- (void)textFieldDidBeginEditing:(UITextField *)textField将被解除之前 keyboardWillShow:方法。

为什么会这样?如何在文本字段的情况下获得键盘CGSize,因为它现在只返回零,因为首先调用文本字段委托而不是键盘选择器。

2 个答案:

答案 0 :(得分:4)

很奇怪......听起来像Apple的错误。

也许你可以推迟键盘弹出?这是我不幸的非常混乱的“解决方法”建议 - 您可以在选择文本字段时发送通知,但之后只实际开始编辑一小段时间,以便在{{1}之前实际知道文本字段} 叫做。例如:

keyboardWillShow:

然后,根据您创建通知的方式,您可以在开始编辑之前插入此已知文本字段的值。

答案 1 :(得分:4)

我遇到了同样的问题。尝试使用:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView