UISearchBar не отвечает на resignFirstResponder, когда я хочу - PullRequest
1 голос
/ 20 февраля 2012

У меня есть UITableView с прикрепленным UISearchBar. Когда пользователь нажимает клавишу поиска на клавиатуре, я хочу отправить запрос на сервер, чтобы получить некоторую информацию. Все работает нормально, но resignFirstResponder не закрывает клавиатуру, пока запрос не будет отправлен. Это то, что у меня есть

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    [self.mySearchBar resignFirstResponder];
    [self.brain searchInfo: mySearchBar.text];
    [self.tableView reloadData];
}

Я также пытался использовать

[self.view endEditing:YES];

но без успеха ...

Ответы [ 3 ]

5 голосов
/ 02 сентября 2013

Похоже на простую проблему с потоками. Попробуйте это ...

[searchBar performSelectorOnMainThread:@selector(resignFirstResponder) withObject:nil waitUntilDone:NO];
0 голосов
/ 20 февраля 2012

Обновления пользовательского интерфейса выполняются только после завершения цикла запуска.Это означает, что resignFirstResponder будет иметь эффект только после того, как ваш searchBarSearchButtonClicked: метод (и его вызывающие методы) завершится.Поскольку ваш метод searchInfo: должен ждать, пока он не получит ответ, метод отставки до этого не будет иметь никакого эффекта.

Перепишите приложение, чтобы использовать NSURLConnection, который отправляет асинхронный запрос.У Apple есть статья о том, как вы это делаете .Это больше работы, но вы должны пойти по этому пути, чтобы улучшить качество вашего приложения.

0 голосов
/ 20 февраля 2012

Похоже, searchInfo: метод занимает много времени. Вы можете изменить его на асинхронную работу и обновить tableView в другом месте, как только ваш запрос будет выполнен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...