1

我有一个带有UISearchBar的UITableView。当用户点击键盘上的搜索键时,我想向服务器发送请求以获取一些信息。一切工作正常,但resignFirstResponder不会关闭键盘,直到发送请求。这是我当我想要时,UISearchBar不回答resignFirstResponder

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

我也曾尝试使用

[self.view endEditing:YES]; 

但没有更迭......

+0

你是否同步发送请求? – 0xSina 2012-02-20 15:17:38

+0

是的,有什么建议吗? – sergiocg90 2012-02-20 15:47:08

回答

0

仅当runloop结束时才会执行对UI的更新。这意味着resignFirstResponder只会在您的searchBarSearchButtonClicked:方法(以及它的调用方法)完成后才起作用。由于您的searchInfo:方法必须等待,直到它获得响应,那么resign方法在此之前将不起作用。

重写您的应用程序以使用发送异步请求的NSURLConnection。苹果有article about how you do that。这是更多的工作,但你应该走这条路来提高你的应用程序的质量。

0

好像searchInfo:方法需要很长的时间。您可以将其更改为异步工作,并在您的请求完成后在其他位置刷新tableView。

+0

我该怎么做? – sergiocg90 2012-02-20 15:44:52

6

看起来像一个简单的线程问题。试试这个......

[searchBar performSelectorOnMainThread:@selector(resignFirstResponder) withObject:nil waitUntilDone:NO];