NotificationCenter по умолчанию addObserver работает только при зарядке? - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь переместить свое текстовое поле вверх, когда клавиатура используется для отображения, и снова оно исчезает, когда клавиатура скрывается. Так что там я использую NotificationCenter.default.addObserver, но он работает нормально только тогда, когда он заряжается, и когда я вынимаю из зарядного устройства, он не работает, т.е. он не двигается, что может быть в этом случае. Пожалуйста, помогите мне с этим. Заранее спасибо

Ниже мой код:

 override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
  }

   @objc func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if self.view.frame.origin.y != 0{
            self.view.frame.origin.y -= 50
        }
    }
}

@objc func keyboardWillHide(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        if self.view.frame.origin.y != 0{
            self.view.frame.origin.y += 50
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Если self.view.frame.origin.y равно 0, то ничего не произойдет.Правильно?

@objc func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        // If `origin.y` is `0`, then do nothing.
        if self.view.frame.origin.y != 0{
            self.view.frame.origin.y -= 50
        }
    }

@objc func keyboardWillHide(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        // If `origin.y` is `0` in `keyboardWillShow`, 
        // it will still be `0` here.
        // So, do nothing. 
        if self.view.frame.origin.y != 0{
            self.view.frame.origin.y += 50
        }
    }
}
0 голосов
/ 18 сентября 2018

Проблема в том, что вы используете UIKeyboardFrameBeginUserInfoKey вместо UIKeyboardFrameEndUserInfoKey.

Код должен быть:

@objc func keyboardWillShow(_ notification: Notification) {
    if let keyboardFrame: NSValue = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue {
        let keyboardRectangle = keyboardFrame.cgRectValue
        let keyboardHeight = keyboardRectangle.height
    }
}
...