É um problema que tive e consegui solucionar. Poderá ser útil para alguém tendo a mesma dificuldade.
Quando implementei a opção de liberar o teclado ao clicar na view, ocorreram dois problemas:
- o teclado não desaparecia.
- quando clicava na célula do filme, a transição para a próxima tela também não acontecia.
A solução que encontrei foi a seguinte:
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .background
setupNavigationBar()
addSubviews()
setupConstraints()
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(UIInputViewController.dismissKeyboard))
tapGesture.cancelsTouchesInView = false
view.addGestureRecognizer(tapGesture)
}
private func addSubviews() {
view.addSubview(tableView)
}
@objc private func dismissKeyboard() {
searchBar.endEditing(true)
}
- Define que o tap gesture não deve cancelar outros toques na view. Ex: Clicar na célula do filme:
tapGesture.cancelsTouchesInView = false
- Termina a edição da searchBar, o que faz o teclado desaparecer:
@objc private func dismissKeyboard() {
searchBar.endEditing(true)
}