Получите размер клавиатуры без UIKeyboardWillShowNotification

Я хочу получить размер клавиатуры без использования доступных уведомлений клавиатуры. Причина в том, что у меня есть несколько текстовых полей в представлении, и мне не нужно изменять размер для всех из них, как я видел почти в каждом примере. Мне просто нужно изменить размер представления для некоторых текстовых полей/представлений, которые будут позади клавиатуры при редактировании. Поэтому я использую textFieldDidBeginEditing и textFieldDidEndEditing, потому что здесь я знаю, какое текстовое поле редактируется. Другая проблема заключается в том, что даже если я подписываюсь на уведомления о клавиатуре, UIKeyboardWillShowNotification запускается после textFieldDidBeginEditing, поэтому я не могу получить размер клавиатуры при первой активации. Я предполагаю, что никакая информация не предоставляется от функций уведомления клавиатуры, где фактическое текстовое поле или представление недоступны.

The following code works but I need the keyboard size:

- (void) textFieldDidBeginEditing:(UITextField *) textField {
  if ([theControls containsObject: textField]) {
    [UIView beginAnimations: @"szar" context: nil];
    [UIView setAnimationDuration:0.3];
    self.view.transform = CGAffineTransformTranslate(self.view.transform, 0, -216);
    [UIView commitAnimations];
  }
}

- (void) textFieldDidEndEditing:(UITextField *) textField {
  if ([theControls containsObject: textField]) {
    [UIView beginAnimations: @"szar" context: nil];
    [UIView setAnimationDuration:0.3];
    self.view.transform = CGAffineTransformTranslate(self.view.transform, 0, +216);
    [UIView commitAnimations];
  }
}

Ответ 1

Я все еще использовал Уведомления, но не те, которые вы указали против. Может быть, это будет работать лучше? Просто пытаюсь помочь, я понимаю, как это может расстраивать.

viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(keyboardWasShown:)
                                         name:UIKeyboardDidShowNotification
                                       object:nil];
 //For Later Use
[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(keyboardWillHide:)
                                         name:UIKeyboardWillHideNotification
                                       object:nil];
}

- (void)keyboardWasShown:(NSNotification *)notification {
  // Get the size of the keyboard.
  CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
}

Изменить: это может помочь отличить активные текстовые поля от неактивного

- (void)textFieldDidBeginEditing:(UITextField *)textField {
self.activeTextField = textField;
}


- (void)textFieldDidEndEditing:(UITextField *)textField{
self.activeTextField = nil;
}