呈现视图控制器时键盘通知不一致

时间:2018-06-17 18:01:07

标签: ios keyboard modalviewcontroller presentviewcontroller custom-transition

我有一个目前处于编辑模式的视图控制器A,即它有一个文本字段,当前是第一个响应者。

Transition with visible keyboard

现在我使用自定义动画制作工具从B呈现视图控制器A

class Animator: NSObject, UIViewControllerAnimatedTransitioning {

    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
        return 1
    }

    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        print("-----  Transition Animation BEGIN -----")
        guard let toView = transitionContext.view(forKey: .to) else {
            return
        }
        transitionContext.containerView.addSubview(toView)
        print("-----  Transition Animation ADDED SUBVIEW -----")
        toView.frame = transitionContext.containerView.bounds
        toView.layoutIfNeeded()
        transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
    }     
}

为了简单起见,这个动画师没有太多的动画:它只是将目标视图控制器的视图添加到层​​次结构中,就是这样。

视图控制器B也有一个文本字段,当它出现在屏幕上时,我希望它立即成为第一个响应者。因此,我添加了此代码以查看控制器B

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    textField.becomeFirstResponder()
}

现在有趣的部分是

之间发生的事情
-----  Transition Animation BEGIN -----

-----  Transition Animation ADDED SUBVIEW -----

1。在Rootview里面

当视图控制器A中的文本字段放在位于其根视图内的任何位置时,这些是我从NotificationCenter收到的键盘通知:

-----  Transition Animation BEGIN -----
UIKeyboardDidChangeFrameNotification
UIKeyboardDidHideNotification
UIKeyboardWillChangeFrameNotification
UIKeyboardWillShowNotification
UIKeyboardDidChangeFrameNotification
UIKeyboardDidShowNotification
-----  Transition Animation ADDED SUBVIEW -----

换句话说:将目标视图控制器的视图添加到转换的容器视图会导致触发所有这些键盘通知。这很棒,因为之后我可以更新B的布局来考虑键盘,并将这些布局更改应用到我的过渡动画中。

2。内部集合视图单元格

当文本字段位于视图控制器A的集合视图单元中时,转换期间不会收到任何键盘通知:

-----  Transition Animation BEGIN -----
-----  Transition Animation ADDED SUBVIEW -----

任何情况下,这些是我在过渡动画开始之前收到的通知

UIKeyboardWillChangeFrameNotification
UIKeyboardWillHideNotification

这是有问题的,因为在第二个场景中,控制器B仍“认为”在动画期间隐藏了键盘。因此,我无法布局其视图并创建正确的动画。

知道为什么在方案2中没有触发键盘通知以及我如何解决这个问题?

0 个答案:

没有答案