Кнопка перемещения с клавиатурой, Swift - PullRequest
0 голосов
/ 20 марта 2020
@objc func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {

        if self.textView.frame.origin.y == 0 {
            let height = keyboardSize.height
            self.textButton.frame.origin.y -= height
            Log.debug("height: \(height)")
        }
    }
}

@objc func keyboardWillHide(notification: NSNotification) {
     if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {

    if self.textButton.frame.origin.y != 0 {
        let height = keyboardSize.height
        self.textButton.frame.origin.y += height
        Log.debug("height: \(height)")
    }
}
}

У меня есть эта 2 функция, вызываемая соответствующим наблюдателем. Проблема в том, что высота клавиатуры меняется после второго показа клавиатуры. Вот что произошло =>

  • KeyBoard show => высота 346
  • Keyboard hide => высота 346
  • Keyboard show => высота 243
  • клавиатура скрыть => высота 346
  • Показ клавиатуры => высота 243

Вот где я установил свою кнопку:

textButton.frame = CGRect(x: textView.frame.width - 95, y: textView.frame.height , width: 70, height: 70)

И это моя кнопка функция вызывается из ViewDidLoad ()

 @objc func crossButtonTapped(_ sender:UIButton) {
    self.textView.resignFirstResponder()
}

Ps Что если я хочу, чтобы клавиатура отображалась при нажатии кнопки и скрывалась при повторном нажатии кнопки?

Спасибо!

1 Ответ

0 голосов
/ 20 марта 2020

Во-первых, если вы хотите добавить кнопки, которые будут располагаться над клавиатурой, я рекомендую использовать «UIToolbar».

и для вашего PS это довольно просто:

@objc func crossButtonTapped(_ sender:UIButton) {
    self.textView.isFirstResponder ? self.textView.resignFirstResponder() : 
    self.textView.becomeFirstResponder() 
}

Надеюсь, это поможет: )

...