Скрыть клавиатуру Swift - PullRequest
0 голосов
/ 26 января 2020

У меня есть ViewController с TableView и нижним представлением, отвечающим за публикацию комментариев. Я хочу спрятать клавиатуру, нажав в любом месте, кроме моего вида снизу. Но в данный момент клавиатура скрывается даже при нажатии на кнопку отправки сообщения, и сообщение не отправляется. enter image description here

Ответы [ 2 ]

2 голосов
/ 26 января 2020

Вы можете сделать что-то вроде этого:

    extension UITableView {

        open override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            self.superview?.endEditing(true) // should be a path to top most view
            super.touchesBegan(touches, with: event)
        }
    }

Или вы можете создать подкласс из UITableView и применить к этому конкретному tableView.

Другой вариант - добавлять прозрачное наложение каждый раз время появления клавиатуры и добавления к ней действия касания - чтобы закрыть клавиатуру и удалить наложение, но в этом случае таблица не будет прокручиваться, пока вы не закроете клавиатуру.

0 голосов
/ 26 января 2020
override func hideKeyboard() {
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tableViewTap(gestureRecognizer:)))
    tapGesture.cancelsTouchesInView = false
    view.addGestureRecognizer(tapGesture)
}

@objc func tableViewTap(gestureRecognizer: UITapGestureRecognizer) {
    textInputBar.commentTextField.endEditing(true)
}

@objc func handleKeyboardNotifications(notification: Notification) {

    if let userInfo = notification.userInfo {
        guard let keyboardFrame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return }
        print(keyboardFrame)
        let isKeyboardShowing = notification.name == UIResponder.keyboardWillShowNotification
        bottomSendCommentViewConstraint.constant = isKeyboardShowing ? keyboardFrame.height - 83 : 5
        bottomTableViewConstraint.constant = isKeyboardShowing ? keyboardFrame.height - 83 : 0

        UIView.animate(withDuration: 0, delay: 0, options: .curveEaseOut, animations: {
            self.view.layoutIfNeeded()
        }, completion: nil)
    }
}

private func keyboardNotifications() {
    NotificationCenter.default.addObserver(self,
                                           selector: #selector(handleKeyboardNotifications(notification:)),
                                           name: UIResponder.keyboardWillShowNotification,
                                           object: nil)
    NotificationCenter.default.addObserver(self,
                                           selector: #selector(handleKeyboardNotifications(notification:)),
                                           name: UIResponder.keyboardWillHideNotification,
                                           object: nil)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...