键盘弹起收起时不遮挡处理
view初始化时增加通知:
{code}
//增加监听,当键盘出现或改变时收出消息
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
//增加监听,当键退出时收出消息
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
{code}
键盘弹起和收起时触发的动作
{code}
- (void)keyboardWillShow:(NSNotification *)notification {
if (!_highlightedTextField) {// 当前焦点TextField
return;
}
UIView *view = [self superview];
while (![view isKindOfClass:[UIScrollView class]] &&
[view superview]) {
view = [view superview];
}
if (![view isKindOfClass:[UIScrollView class]]) {
return;
}
UIScrollView *scrollView = (UIScrollView *)view;
CGSize kbSize = [[notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CGFloat keyboardHeight = kbSize.height;
UITextField *textField = _highlightedTextField;
if ([UIApplication sharedApplication].windows.count == 0) {
return;
}
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardHeight, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
UIWindow *window = [UIApplication sharedApplication].windows[0];
CGRect textRect = [scrollView convertRect:textField.bounds fromView:textField];
CGRect scrollRect = [window convertRect:scrollView.bounds fromView:scrollView];
CGFloat scrollBottomMargin = window.height - scrollRect.origin.y - scrollRect.size.height;
CGFloat offset = textRect.origin.y + textRect.size.height - scrollView.contentOffset.y - scrollBottomMargin - (scrollView.height - keyboardHeight);
if (offset > 0) {
CGPoint scrollPoint = CGPointMake(0.0, scrollView.contentOffset.y + offset);
[scrollView setContentOffset:scrollPoint animated:YES];
}
}
- (void)keyboardWillHide:(NSNotification *)notification{
UIView *view = [self superview];
while (![view isKindOfClass:[UIScrollView class]] &&
[view superview]) {
view = [view superview];
}
if (![view isKindOfClass:[UIScrollView class]]) {
return;
}
UIScrollView *scrollView = (UIScrollView *)view;
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
}
{code}