Итак, я настроил уведомление о событии появления клавиатуры. Теперь рассмотрим 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
запускается ПОСЛЕ метода keyboardWillShow:
. Так что клавиатура имеет фактический размер клавиатуры, и я могу использовать ее внутри метода делегата textview.
Однако в случае UITextField соответствующий метод делегата - (void)textFieldDidBeginEditing:(UITextField *)textField
запускается ПЕРЕД методом keyboardWillShow:
.
Почему это так? Как получить клавиатуру CGSize
в случае текстового поля, так как теперь она просто возвращает ноль, потому что делегат текстового поля вызывается первым, а не селектор клавиатуры.