Как получить размер UIKeyboard с Apple iPhone SDK

Есть ли способ получить размер UIKeyboard программно. 216.0f высота и 162.0f высота в ландшафте.

Кажется, что их лишают. Есть ли способ, который работает без предупреждения в 3.0 SDK для iPhone OS и 4.0 SDK для iPhone, чтобы это сделать.

CGSize keyBoardSize = [[[note userInfo] objectForKey:UIKeyboardBoundsUserInfoKey]CGRectValue].size; 

Спасибо, Тарину

Вы можете получить размер клавиатуры из словаря userInfo, используя вместо этого UIKeyboardFrameBeginUserInfoKey и UIKeyboardFrameEndUserInfoKey .

Эти два ключа возвращают экземпляр NSValue содержащий CGRect который содержит положение и размер клавиатуры в начальной и конечной точках анимации show / hide на клавиатуре.

Редактировать:

Чтобы уточнить, словарь userInfo поступает из экземпляра NSNotification . Он передается вашему методу, который вы регистрируете у наблюдателя. Например,

 - (void)someMethodWhereYouSetUpYourObserver { // This could be in an init method. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myNotificationMethod:) name:UIKeyboardDidShowNotification object:nil]; } - (void)myNotificationMethod:(NSNotification*)notification { NSDictionary* keyboardInfo = [notification userInfo]; NSValue* keyboardFrameBegin = [keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey]; CGRect keyboardFrameBeginRect = [keyboardFrameBegin CGRectValue]; } 

Изменить 2:

Кроме того, пожалуйста, не забудьте удалить себя в качестве наблюдателя в свой метод dealloc ! Это делается для предотвращения сбоя, который может произойти, когда центр уведомлений пытается уведомить ваш объект после его освобождения.

UIKeyboardWillChangeFrameNotification этого вы должны использовать UIKeyboardWillChangeFrameNotification , потому что некоторые международные клавиатуры, такие как китайская клавиатура, будут менять кадры во время использования. Также убедитесь, что вы CGRect в нужном виде для ландшафтного использования.

 //some method like viewDidLoad, where you set up your observer. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil]; - (void)keyboardWillChange:(NSNotification *)notification { CGRect keyboardRect = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue]; keyboardRect = [self.view convertRect:keyboardRect fromView:nil]; //this is it! } 

Вот как я наконец сделал работы. Я объединил предложения и коды из разных ответов. Особенности: отклонение клавиатуры, перемещение текстовых полей над клавиатурой при редактировании и установка типа «Next» и «Done» для клавиатуры. REPLACE «…» с большим количеством полей

 static const CGFloat ANIMATION_DURATION = 0.4; static const CGFloat LITTLE_SPACE = 5; CGFloat animatedDistance; CGSize keyboardSize; @interface ViewController ()  @property (weak, nonatomic) IBOutlet UITextField *firstNameTXT; .....// some other text fields @property (weak, nonatomic) IBOutlet UITextField *emailTXT; @end @implementation ViewController - (void)viewDidLoad{ ..... // add tap gesture to help in dismissing keyboard UITapGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapScreen:)];// outside textfields [self.view addGestureRecognizer:tapGesture]; // set text fields return key type to Next, last text field to Done [self.firstNameTXT setReturnKeyType:UIReturnKeyNext]; ..... [self.emailTXT setReturnKeyType:UIReturnKeyDone]; // set text fields tags [self.firstNameTXT setTag:0]; ....// more text fields [self.emailTXT setTag:5]; // add keyboard notification [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; } [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; } // dismiss keyboard when tap outside text fields - (IBAction)tapScreen:(UITapGestureRecognizer *)sender { if([self.firstNameTXT isFirstResponder])[self.firstNameTXT resignFirstResponder]; ... if([self.emailTXT isFirstResponder])[self.emailTXT resignFirstResponder]; } - (BOOL)textFieldShouldReturn:(UITextField *)textField{ if(textField.returnKeyType==UIReturnKeyNext) { // find the text field with next tag UIView *next = [[textField superview] viewWithTag:textField.tag+1]; [next becomeFirstResponder]; } else if (textField.returnKeyType==UIReturnKeyDone || textField.returnKeyType==UIReturnKeyDefault) { [textField resignFirstResponder]; } return YES; } // Moving current text field above keyboard -(BOOL) textFieldShouldBeginEditing:(UITextField*)textField{ CGRect viewFrame = self.view.frame; CGRect textFieldRect = [self.view.window convertRect:textField.bounds fromView:textField]; CGRect viewRect = [self.view.window convertRect:self.view.bounds fromView:self.view]; CGFloat textFieldBottomLine = textFieldRect.origin.y + textFieldRect.size.height + LITTLE_SPACE;// CGFloat keyboardHeight = keyboardSize.height; BOOL isTextFieldHidden = textFieldBottomLine > (viewRect.size.height - keyboardHeight)? TRUE :FALSE; if (isTextFieldHidden) { animatedDistance = textFieldBottomLine - (viewRect.size.height - keyboardHeight) ; viewFrame.origin.y -= animatedDistance; [UIView beginAnimations:nil context:NULL]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationDuration:ANIMATION_DURATION]; [self.view setFrame:viewFrame]; [UIView commitAnimations]; } return YES; } -(void) restoreViewFrameOrigionYToZero{ CGRect viewFrame = self.view.frame; if (viewFrame.origin.y != 0) { viewFrame.origin.y = 0; [UIView beginAnimations:nil context:NULL]; [UIView setAnimationBeginsFromCurrentState:YES]; [UIView setAnimationDuration:ANIMATION_DURATION]; [self.view setFrame:viewFrame]; [UIView commitAnimations]; } } -(void)keyboardDidShow:(NSNotification*)aNotification{ NSDictionary* info = [aNotification userInfo]; keyboardSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; } -(void)keyboardDidHide:(NSNotification*)aNotification{ [self restoreViewFrameOrigionYToZero];// keyboard is dismissed, restore frame view to its zero origin } @end 

С быстрым 4

 override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(getInfo(notif:)), name: .UIKeyboardDidShow , object: nil) } 

а потом:

 @objc func getInfo(notif: NSNotification) -> Void { guard let userInfo = notif.userInfo else {return} if let myData = userInfo["UIKeyboardFrameBeginUserInfoKey"] as? CGRect { print(myData.width) print(myData.height) } } 
  • Как правильно представить popover из UITableViewCell с помощью UIPopoverArrowDirectionRight или UIPopoverArrowDirectionLeft
  • Как создать изображение из UILabel?
  • Множественное перечисление значений в Obj-C
  • Есть ли способ указать позицию / индекс аргумента в NSString stringWithFormat?
  • Изменить цвет курсора в UITextField
  • Выясните, кадр UIBarButtonItem в окне?
  • Программно извлекать использование памяти на iPhone
  • Сохранить фотографии в пользовательский альбом в iPhones Photo Library
  • Как размыть сцену в SpriteKit?
  • iPhone - Что такое reuseIdentifiers (UITableViewCell)?
  • Лучший способ сохранить данные на iPhone
  • Interesting Posts

    Как получить IP-адрес ПК для WakeOnLan через Интернет (только с использованием приложений Windows 7)

    Проблема с разрешением экрана в WPF?

    Инструменты для генерации Mock Data?

    Перейти к определенному номеру строки в excel

    Как проверить, действительно ли файл UTF-8?

    Как измерить высоту TextView на основе ширины и размера шрифта устройства?

    Используете ли вы фигурные скобки для дополнительной проверки?

    Горячая клавиша Windows XP для фокусировки определенного окна

    Как я могу получить размер массива, коллекции или строки в Java?

    Изменение локальной папки Google Диска

    Не удалось импортировать новый проект Gradle: не удалось найти версию Build Tools * .0.0

    Скрыть открытые ярлыки на рабочем столе без административных привилегий

    Повреждение ключей клавиатуры в Windows XP

    Запланированная задача не выполняется по плану

    Почему Iterable не предоставляет методы stream () и parallelStream ()?

    Давайте будем гением компьютера.