domingo, 6 de abril de 2014

Botão Cancelar do UISearchBarController não funciona

Enfrentei o seguinte problema hoje:

Coloquei um UISearchBarController no header da UITableView para fazer uma busca na tabela. Se eu toco no campo de busca ele joga o UISearchBar lá para cima no lugar do UINavigationController e funciona muito bem. Porém, se eu ativar o UISearchBar via código [self.searchDisplayController.searchBar becomeFirstResponder]; ele joga o o UISearchBar lá para cima também, mas não funciona o Clear Button nem o Cancel Button. 

Solução: Deslizar a tabela via código para fazer o UISearchBar aparecer na tela e depois ativar o UISearchBar. Eu não sei o porquê, talvez seja um bug do iOS, mas a impressão que deu é que ele precisa aparecer na interface para se configurar corretamente.

[self.tableView setContentOffset:CGPointMake(0, -64) animated:NO];
[self.searchDisplayController.searchBar becomeFirstResponder];

Fonte: StackOverflow