在我想要的时候,UISearchBar不回复resignFirstResponder

时间:2012-02-20 15:04:27

标签: iphone objective-c uitableview uisearchbar resignfirstresponder

我有一个附带UISearchBar的UITableView。当用户点击键盘中的搜索键时,我想向服务器发送请求以获取一些信息。一切正常,但resignFirstResponder在请求发送之前不会关闭键盘。这就是我所拥有的

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

我也尝试过使用

[self.view endEditing:YES];

但没有成功......

3 个答案:

答案 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。这是更多的工作,但你应该走这条路来提高你的应用程序的质量。