Swift解雇自定义键盘奇怪的行为

时间:2015-03-13 06:29:17

标签: ios swift uitextfield first-responder custom-keyboard

我有一个自定义键盘最奇怪的情况。
首先,我为文本字段设置了一个虚拟视图,以便隐藏股票键盘let dummyView : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 1, height: 1)) amountField.inputView = dummyView
然后我的自定义键盘在文本字段

开始编辑时动画
func textFieldDidBeginEditing(textField: UITextField) {
        keyboardContainer.hidden = false
        UIView.animateWithDuration(0.6, animations: {
            self.keyboardContainer.frame = self.keyboardScreenPosition!
            }, completion: {
                finished in
                if finished {
                    //just in case
                }
        })

    }

另外,我已经设置了一个按钮,该按钮应该结束编辑并隐藏我的自定义键盘

@IBAction func calculeaza(sender: AnyObject) {

        self.amountField.resignFirstResponder()

        UIView.animateWithDuration(0.6, animations: {

            self.keyboardContainer.frame.origin.y = self.view.bounds.height
            }, completion: {
                finished in
                if finished {

                }
        })
    }

最奇怪的部分来自resignFirstResponder()。让我解释一下:如果不包含该部分,键盘隐藏得很好(但文本字段保持闪烁的光标,这不是c的选项)。
如果包括辞职部分,键盘将从顶部动画到当前位置,然后再次按下按钮,它会按预期向下滑动。我真的很困惑为什么会发生这种情况...我调试了视图的大小,高度还可以,所以它应该从头开始滑下来。我真的不明白发生了什么。
非常感谢任何帮助,非常感谢!

编辑:另一个奇怪的效果是如果我在动画结束闭包中移动resign部分(或超级编辑)。键盘滑动得很好,然后它再次出现在屏幕上

1 个答案:

答案 0 :(得分:0)

这听起来像是自动布局限制的问题。这些在animateWithDuration之后更新,这可能导致这种奇怪的行为。如果在故事板中有(a)约束用于自动布局,请尝试更新(/那些)。如果您还没有,则需要将其添加为IBOutlet并为持续时间中的自动布局更改设置动画。

例如,假设约束称为theRelevantConstraint。然后替换中间线

self.theRelevantConstraint.constant = valueItShouldBe
UIView.animateWithDuration(0.6, animations: {
  self.view.layoutIfNeeded()
  }, completion: {
    finished in
    if finished {

    } 
})