diff --git a/ios/KeyboardControllerViewManager.swift b/ios/KeyboardControllerViewManager.swift index ba64c0da9e..45dbe2a707 100644 --- a/ios/KeyboardControllerViewManager.swift +++ b/ios/KeyboardControllerViewManager.swift @@ -23,11 +23,20 @@ class KeyboardControllerView : UIView { } override func willMove(toWindow newWindow: UIWindow?) { - super.willMove(toWindow: newWindow) - NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillDisappear), name: UIResponder.keyboardWillHideNotification, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear), name: UIResponder.keyboardWillShowNotification, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidAppear), name: UIResponder.keyboardDidShowNotification, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidDisappear), name: UIResponder.keyboardDidHideNotification, object: nil) + if (newWindow == nil) { + // Will be removed from a window + NotificationCenter.default.removeObserver(self) + } + } + + override func didMoveToWindow() { + if (self.window != nil) { + // Added to a window + NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillDisappear), name: UIResponder.keyboardWillHideNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillAppear), name: UIResponder.keyboardWillShowNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidAppear), name: UIResponder.keyboardDidShowNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidDisappear), name: UIResponder.keyboardDidHideNotification, object: nil) + } } @objc func keyboardWillAppear(_ notification: Notification) { @@ -66,9 +75,4 @@ class KeyboardControllerView : UIView { data["height"] = 0 KeyboardController.shared?.sendEvent(withName: "KeyboardController::keyboardDidHide", body: data) } - - override func willRemoveSubview(_ subview: UIView) { - super.willRemoveSubview(subview) - NotificationCenter.default.removeObserver(self) // TODO: correct place? - } }