iOS 监听键盘详解手机开发

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

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;

    }];

}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/3324.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论