Анимация элементов панели кнопок в UIKeyboardWillShowNotification

Я не могу понять, что не так. У меня есть 2 правые кнопки в навигационной панели, и когда клавиатура включена, я хочу кнопки A и B, а когда клавиатура выключена, A и C, или, может быть, просто C. Я сделал это. Я использую UIKeyboardWillShowNotification, чтобы проверить, когда клавиатура включена или выключена.

 NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)

 NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil)

Работает нормально. Проблема в том, что когда я вызываю методы "KeyboardWillShow" и "KeyboardWillHide", появляются нужные кнопки. Смотрите здесь: GIF

 func keyboardWillShow(sender: NSNotification) {
    if let userInfo = sender.userInfo {
        if let keyboardHeight = userInfo[UIKeyboardFrameEndUserInfoKey]?.CGRectValue.size.height {
            textViewBottomConstraint.constant = keyboardHeight
            print("keyboard is shown")

            self.navigationItem.rightBarButtonItems = nil
            let rightButtons : NSArray = [self.keyboardRightButton, self.cameraRightButton]
            self.navigationItem.setRightBarButtonItems(rightButtons as? [UIBarButtonItem], animated: true)

            UIView.animateWithDuration(0.1, animations: { () -> Void in
                self.view.layoutIfNeeded()

            })
        }
    }


}

Я пытался с этим, он отлично работает, но только при отклонении клавиатуры.

func dismissKeyboard()
{

    composeTextView.resignFirstResponder()

    self.navigationItem.rightBarButtonItems = nil
    self.navigationItem.setRightBarButtonItem(settingsRightButton, animated: false)

1 ответ

Решение

Решено с помощью:

    func textViewShouldBeginEditing(textView: UITextView) -> Bool
{

    self.navigationItem.rightBarButtonItems = nil
    let rightButtons : NSArray = [self.keyboardRightButton, self.cameraRightButton]
    self.navigationItem.setRightBarButtonItems(rightButtons as? [UIBarButtonItem], animated: true)

    return true
}

Спасибо

Другие вопросы по тегам