iOS 监听键盘

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

百度所查到的键盘监听大部分用的是

UIKeyboardDidShowNotification//已经显示

UIKeyboardDidHideNotification//已经隐藏

然后我自己去试一直觉得一些空间跟随键盘的移动是有时间间隔的  一直想不明白他们是怎么实现的  求大神告知  所以自己看源码发现还有

UIKeyboardWillShowNotification//将要显示

UIKeyboardDidHideNotification//将要隐藏

这样是能完美的解决问题的  至少在我自己的项目需求中是可以的

最后别忘记在控制器消失中移除观察者哦


- (void) registerForKeyboardNotifications{

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

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

}

//键盘显示注册通知

- (void) keyboardWasShown:(NSNotification *) note{


    // 获取位置和大小

    CGRect keyboardBounds;

    [[note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue: &keyboardBounds];

    NSNumber *duration = [note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];

    NSNumber *curve = [note.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey];

    

    keyboardBounds = [self.view convertRect:keyboardBounds toView:nil];

    

    // 获取位置和大小

    CGRect containerFrame = _menuView.frame;

    // 计算出y坐标

    containerFrame.origin.y = self.view.bounds.size.height - (keyboardBounds.size.height + containerFrame.size.height);

    _mnueHeight = containerFrame.origin.y;

    _maxHeight = containerFrame.origin.y;

    // 动画改变位置

    [UIView animateWithDuration:[duration doubleValue] animations:^{

        [UIView setAnimationBeginsFromCurrentState:YES];

        [UIView setAnimationDuration:0.1];

        [UIView setAnimationCurve:[curve intValue]];

        // 更改位置

        _menuView.frame = containerFrame;

    }];

}

//键盘消失通知

- (void) keyboardWasHidden:(NSNotification *) note{

    NSNumber *duration = [note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];

    NSNumber *curve = [note.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey];

    

    // 获取位置和大小

    CGRect containerFrame = _menuView.frame;

    containerFrame.origin.y = self.view.bounds.size.height - containerFrame.size.height;

    

    // 动画改变位置

    [UIView animateWithDuration:[duration doubleValue] animations:^{

        [UIView setAnimationBeginsFromCurrentState:YES];

        [UIView setAnimationDuration:[duration doubleValue]];

        [UIView setAnimationCurve:[curve intValue]];

        // 更改位置

        _menuView.frame = containerFrame;

    }];

}


标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:iphone开发打开系统相机的闪光灯

下一篇:iOS开发中各种版本、设备的区分