Размер виртуальной клавиатуры iOS без центра уведомлений
Мне нужно прокрутить вверх мой scrollView, когда нажата textFiewl, что ниже виртуальной клавиатуры. Я звоню [self.scrollView setContentOffset:scrollPoint animated:YES];
, Чтобы получить видимую область экрана, мне, очевидно, нужен размер в КБ.
Я знаком с
NSDictionary *info = [notification userInfo];
CGSize kbSize = [self.view convertRect:
[info[UIKeyboardFrameBeginUserInfoKey] CGRectValue]
fromView:nil].size;
однако, это не работает для меня, потому что, когда пользователь нажимает на, возможно, наполовину скрытое текстовое поле, я не получаю уведомление клавиатуры.
Поэтому я называю метод в textFieldDidBeginEditing:
, который вызывается до того, как клавиатура отправит сообщение, и поэтому я не знаю размер КБ при первом нажатии.
Таким образом, вопрос: возможно ли получить размер КБ, не вызывая соответствующее уведомление? Программно, а не жестко.
1 ответ
Вы делаете это не правильно.
Вам также необходимо прослушать уведомления о показе / скрытии клавиатуры, а затем настроить экран.
Вот пример кода скелета:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(keyboardChangedStatus:) name:UIKeyboardWillShowNotification object:nil];
[nc addObserver:self selector:@selector(keyboardChangedStatus:) name:UIKeyboardWillHideNotification object:nil];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[nc removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}
#pragma mark - Get Keyboard size
- (void)keyboardChangedStatus:(NSNotification*)notification {
//get the size!
CGRect keyboardRect;
[[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardRect];
keyboardHeight = keyboardRect.size.height;
//move your view to the top, to display the textfield..
[self moveView:notification keyboardHeight:keyboardHeight];
}
#pragma mark View Moving
- (void)moveView:(NSNotification *) notification keyboardHeight:(int)height{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
[UIView setAnimationBeginsFromCurrentState:YES];
CGRect rect = self.view.frame;
if ([[notification name] isEqual:UIKeyboardWillHideNotification]) {
// revert back to the normal state.
rect.origin.y = 0;
hasScrolledToTop = YES;
}
else {
// 1. move the view's origin up so that the text field that will be hidden come above the keyboard (you need to adjust the value here)
rect.origin.y = -height;
}
self.view.frame = rect;
[UIView commitAnimations];
}