防止观察员得到通知

问题描述 投票:0回答:1

我在使用 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 of what happens

ios swift keyboard observers
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消失时,移除键盘通知。

© www.soinside.com 2019 - 2024. All rights reserved.