1
resposta

[Bug] Clico na célula do filme e não avança para a tela de detalhes e o teclado não desaparece

É 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:

  1. o teclado não desaparecia.
  2. 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)
}
1 resposta

Olá, Carolina.

Tudo bem?

Muito obrigado por compartilhar sua solução aqui com a gente! Tenho certeza de que será extremamente útil para outras pessoas que possam estar enfrentando o mesmo problema.

Ao definir tapGesture.cancelsTouchesInView = false, você garantiu que o gesto de toque não interferisse em outros toques na view, como clicar em uma célula da tabela, permitindo que a transição para a tela de detalhes ocorresse normalmente. Além disso, ao implementar o método dismissKeyboard para encerrar a edição da searchBar, você resolveu o problema do teclado que não desaparecia. Muito bom mesmo! Parabéns.

Bons estudos!