0

我在使用该NotificationCenter.default.addObserver函数时遇到问题,因为我有一个 2 viewController 应用程序,其中第二个视图显示为第一个视图之上的弹出框

问题是我设置了一个观察者在显示键盘时向上滑动视图,现在当用户开始在弹出视图文本字段上输入时,出现在背景中的第一个视图也会向上滑动,因为也在观察

我想知道当键盘显示在弹出视图上时是否有办法防止第一个视图向上滑动

这就是我在键盘显示时用来滑动视图的方法

viewDidLoad() {
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
        }
        }
    @objc func keyboardWillShow(notification: NSNotification) {

            if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
                if self.view.frame.origin.y == 0 {
                    self.view.frame.origin.y -= keyboardSize.frame.height + 20
                }
            }
        }

        @objc func keyboardWillHide(notification: NSNotification) {
            if self.view.frame.origin.y != 0 {
                self.view.frame.origin.y = 0
            }
        }

我在两个视图上都有相同的代码

这是这种情况

发生了什么的gif

4

1 回答 1

0

当您从视图中消失时移除通知观察者。

在您的第一个视图控制器中添加以下行

override func viewDidDisappear(_ animated: Bool) {
   super.viewDidDisappear(animated)
   NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil)
   NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}

并在 viewDidAppear 中,添加addObservers

参考:当 ViewController 消失时移除键盘通知

于 2020-05-26T11:17:01.160 回答