Запретить наблюдателю получать уведомления - PullRequest
0 голосов
/ 26 мая 2020

У меня проблема с использованием функции 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
            }
        }

I иметь одинаковый код в обоих представлениях

Это ситуация

gif of what happens

1 Ответ

0 голосов
/ 26 мая 2020

Удалите наблюдателя уведомлений, когда вы исчезаете из представления.

В вашем первом контроллере представления добавьте следующую строку

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

...