您的位置:首页 > 其它

解决简单的键盘遮挡问题

2015-12-04 14:35 218 查看
解决简单的键盘遮挡问题,只要把你写的textfield 的controller继承于此类  或者在你的控制器里加上这些代码  就行

#import "KeyBoardBaseViewController.h"

#import "UIView+Uitls.h"

@interface KeyBoardBaseViewController () {

    CGFloat _totalYOffset;

}

@end

@implementation KeyBoardBaseViewController

- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {

        _totalYOffset = 0;

    }

    

    return self;

}

- (void)viewDidLoad {

    [super viewDidLoad];

}

- (void)viewWillAppear:(BOOL)animated

{

    [super viewWillAppear:animated];

}

- (void)viewDidAppear:(BOOL)animated

{

    [super viewDidAppear:animated];

    

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidChangeFrame:) name:UIKeyboardDidChangeFrameNotification object:nil];

}

- (void)viewWillDisappear:(BOOL)animated

{

    [super viewWillDisappear:animated];

    

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillChangeFrameNotification object:nil];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidChangeFrameNotification object:nil];

}

- (void)keyboardWillShow:(NSNotification *)noti

{

    CGFloat keyboardHeight = [noti.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;;

    [self.view.layer removeAllAnimations];

    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];

    UIView *firstResponderView = [keyWindow performSelector:@selector(findFirstResponder)];

    

    CGRect rect = [[UIApplication sharedApplication].keyWindow convertRect:firstResponderView.frame fromView:firstResponderView.superview];

    

    CGFloat bottom = rect.origin.y + rect.size.height;

    CGFloat keyboardY = self.view.window.size.height - keyboardHeight;

    if (bottom > keyboardY) {

        _totalYOffset += bottom - (self.view.window.size.height - keyboardHeight);

        [UIView animateWithDuration:[noti.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]

                              delay:0

                            options:[noti.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]

                         animations:^{

                             self.view.y -= _totalYOffset;

                         }

                         completion:nil];

    }

}

- (void)keyboardWillHide:(NSNotification *)noti

{

    [UIView animateWithDuration:[noti.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]

                          delay:0

                        options:[noti.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]

                     animations:^{

                         self.view.y += _totalYOffset;

                     }

                     completion:nil];

    _totalYOffset = 0;

}

- (void)keyboardWillChangeFrame:(NSNotification *)noti

{

    

}

- (void)keyboardDidShow:(NSNotification *)noti

{

}

- (void)keyboardDidHide:(NSNotification *)noti

{

}

- (void)keyboardDidChangeFrame:(NSNotification *)noti

{

}

- (void)dealloc

{

    [[NSNotificationCenter defaultCenter] removeObserver:self];

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  键盘 遮挡