【问题标题】:Prevent an observer from getting notified防止观察者收到通知
【发布时间】:2020-09-13 00:48:05
【问题描述】:

我在使用 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 或视频或屏幕截图,以便任何人都能轻松理解您的问题。
  • 我没想到,好主意! @AnkurLahiry

标签: ios swift keyboard observers


【解决方案1】:

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

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

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

参考:Remove keyboard notification when ViewController disappears

【讨论】:

  • 我在文档“注意如果视图控制器由弹出框内的视图控制器呈现,则在呈现的控制器被解除后,不会在呈现的视图控制器上调用此方法。”有任何想法吗? @AnkurLahiry 视图没有完全消失的事实无济于事
猜你喜欢
  • 1970-01-01
  • 2021-04-13
  • 2019-09-18
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多