我有一个附带UISearchBar的UITableView。当用户点击键盘中的搜索键时,我想向服务器发送请求以获取一些信息。一切正常,但resignFirstResponder在请求发送之前不会关闭键盘。这就是我所拥有的
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[self.mySearchBar resignFirstResponder];
[self.brain searchInfo: mySearchBar.text];
[self.tableView reloadData];
}
我也尝试过使用
[self.view endEditing:YES];
但没有成功......
答案 0 :(得分:5)
看起来像一个简单的线程问题。试试这个......
[searchBar performSelectorOnMainThread:@selector(resignFirstResponder) withObject:nil waitUntilDone:NO];
答案 1 :(得分:0)
似乎像searchInfo:方法需要很长时间。您可以将其更改为异步工作,并在您的请求完成后在其他位置刷新tableView。
答案 2 :(得分:0)
只有在runloop结束后才会执行UI更新。这意味着resignFirstResponder只有在searchBarSearchButtonClicked:
方法(及其调用方法)完成后才会生效。由于您的searchInfo:
方法必须等到获得响应,因此resign方法在此之前不起作用。
重写您的应用程序以使用发送异步请求的NSURLConnection。 Apple有一个article about how you do that。这是更多的工作,但你应该走这条路来提高你的应用程序的质量。