Ios 防止键盘切换到日期选择器时视图滑动

Ios 防止键盘切换到日期选择器时视图滑动,ios,swift,uidatepicker,uikeyboard,Ios,Swift,Uidatepicker,Uikeyboard,在我的应用程序中,我有一个UIView,其中包含三个文本字段: 名字,姓氏,出生日期 名称字段并排在一行上,DOB字段在其下一行上 打开或关闭键盘时,视图控制器会向上或向下滑动,以确保字段不会被覆盖。我可以从名字切换到姓氏,而无需额外滑动键盘,因为它们保持打开状态。但是,出生日期设置为显示UIDatePicker而不是键盘。当用户从任一名称字段移动到日期字段时,键盘切换到日期选择器,但不执行keyboardWillHide功能。但是,它将为新的日期选择器执行keyboardWillShow功能,

在我的应用程序中,我有一个UIView,其中包含三个文本字段:

名字,姓氏,出生日期

名称字段并排在一行上,DOB字段在其下一行上

打开或关闭键盘时,视图控制器会向上或向下滑动,以确保字段不会被覆盖。我可以从名字切换到姓氏,而无需额外滑动键盘,因为它们保持打开状态。但是,出生日期设置为显示UIDatePicker而不是键盘。当用户从任一名称字段移动到日期字段时,键盘切换到日期选择器,但不执行keyboardWillHide功能。但是,它将为新的日期选择器执行keyboardWillShow功能,从而再次向上滑动视图控制器

由于这个问题,页面顶部的任何内容都将从视图中滚出,无法取回,除非重新启动应用程序,或者重置VC在视图上的原始坐标,否则将出现/消失

下面是我的代码目前在幻灯片中的样子:

    func keyboardWillShow(notification: NSNotification) {
        if let userInfo = notification.userInfo {
            if let keyboardSize =  (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
                kbHeight = keyboardSize.height
                self.animateTextField(true)
            }
        }
    }

    func keyboardWillHide(notification: NSNotification) {
        self.animateTextField(false)
    }

    func animateTextField(up: Bool) {
            var movementDistance = 80
            var movementDuration = 0.3
            var movement = CGFloat(up ? -movementDistance : movementDistance)
            UIView.beginAnimations("anim", context: nil)
            UIView.setAnimationBeginsFromCurrentState(true)
            UIView.setAnimationDuration(movementDuration)
            self.view.frame = CGRectOffset(self.view.frame, 0, movement)
            UIView.commitAnimations()
    }

最后,我创建了一个跟踪变量来告诉键盘何时打开和关闭。这样,滑动功能仅在满足条件时执行

我的动画功能的新代码是:

    func animateTextField(up: Bool) {
        if(up) {
            if(!keyboardIsOpen) {
                var movementDistance = -80
                var movementDuration = 0.3
                var movement = CGFloat(movementDistance)
                UIView.beginAnimations("anim", context: nil)
                UIView.setAnimationBeginsFromCurrentState(true)
                UIView.setAnimationDuration(movementDuration)
                self.view.frame = CGRectOffset(self.view.frame, 0, movement)
                UIView.commitAnimations()
                keyboardIsOpen = true
            }
        }
        else {
            if(keyboardIsOpen) {
                var movementDistance = 80
                var movementDuration = 0.3
                var movement = CGFloat(movementDistance)
                UIView.beginAnimations("anim", context: nil)
                UIView.setAnimationBeginsFromCurrentState(true)
                UIView.setAnimationDuration(movementDuration)
                self.view.frame = CGRectOffset(self.view.frame, 0, movement)
                UIView.commitAnimations()
                keyboardIsOpen = false
            }
        }
    }
简单