1.注册关于键盘的Notification:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self registerForKeyboardNotifications];
}
- (void)registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidShow:)
name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification object:nil];
}
2.实现的主要方法:
- (void)keyboardDidShow:(NSNotification*)notification {
NSDictionary* info = [notification userInfo];
CGRect keyboardEndFrame = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGRect overlappedRect = CGRectIntersection(self.scrollView.bounds, [self.view.window convertRect:keyboardEndFrame toView:self.scrollView]);
CGSize kbSize = overlappedRect.size;
//CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
self.scrollView.contentInset = contentInsets;
self.scrollView.scrollIndicatorInsets = contentInsets;
if (_activedTextField) {
CGRect aRect = self.contentView.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, _activedTextField.frame.origin)) {
CGPoint scrollPoint = CGPointMake(0.0, _activedTextField.frame.origin.y - kbSize.height);
[self.scrollView setContentOffset:scrollPoint animated:YES];
}
}
if (_activedTextView) {
[self.scrollView setContentOffset:CGPointMake(0.0, self.content_label.frame.origin.y) animated:YES];
}
}
- (void)keyboardWillHide:(NSNotification*)notification {
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
self.scrollView.contentInset = contentInsets;
self.scrollView.scrollIndicatorInsets = contentInsets;
}
3.在viewWillDisapper:animated中取消Notification:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self unregisterForKeyboardNotifications];
}
- (void)unregisterForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}
如果盖住了scrollview的内容,有一个统一的方法
- (void)keyboardDidShow:(NSNotification *)notification
{
NSDictionary* info = [notification userInfo];
CGRect keyboardEndFrame = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGRect overlappedRect = CGRectIntersection(self.scrollView.bounds, [self.view.window convertRect:keyboardEndFrame toView:self.scrollView]);
CGSize kbSize = overlappedRect.size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
self.scrollView.contentInset = contentInsets;
self.scrollView.scrollIndicatorInsets = contentInsets;
}
- (void)keyboardDidHide:(NSNotification *)notificaton
{
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
self.scrollView.contentInset = contentInsets;
self.scrollView.scrollIndicatorInsets = contentInsets;
}