Сначала вам нужно получить уведомление от iOS, когда клавиатура появилась.
В viewDidLoad вы можете зарегистрировать свой VC в Observ:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShown:)
name:UIKeyboardWillShowNotification object:nil];
Теперь ваш keyboardWillShown: методы будут вызываться, когда появится клавиатура. В клавиатуреWillShown: метод, который вы хотите изменить в tableViews contentInset. Это, как вы делаете:
- (void)keyboardWillShown:(NSNotification*)aNotification {
NSDictionary* info = [aNotification userInfo];
self.keyboardSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey]CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0,self.keyboardSize.height, 0.0);
self.tableView.contentInset = contentInsets;
self.tableView.scrollIndicatorInsets = contentInsets;
[self scrollToContent];
}
Теперь вы изменили tableViews contentInset и вы сохранили клавишный размер к свойству (keyboardSize), но это не проверяются, что содержание видно. В последней строке я назвал метод scrollToContent который прокручивать Tableview в требуемое положение:
-(void)scrollToShowActiveField {
//your views size
CGRect myViewRect = self.view.frame;
//substract the keyboards size
myViewRect.size.height -= self.kbSize.height;
//offsettedFrame is your UITextView
CGRect offsettedFrame = self.activeField.frame;
//we want to see some "padding" between the textview and the keyboard so I add some padding
offsettedFrame.origin.y += 100;
if (!CGRectContainsPoint(myViewRect, offsettedFrame.origin)) {
[self.tableView scrollRectToVisible:offsettedFrame animated:YES];
}
}
Я предположил, что ваш UITableView имеет полноэкранный размер. Если нет, то вам нужно настроить размер содержимого в соответствии с вашими потребностями.
Разве это не нуждается в моем вмешательстве? – Cherif
Это должно быть абсолютно необходимо для вашего вмешательства. Поскольку клавиатура - это окно, отображаемое * над * вашими представлениями и не связанное с вашим приложением, это зависит от вашего приложения, чтобы переместить представления соответственно. –