Iphone 如何在不激活UISearchDisplayController的情况下在UISearchBar中设置文本

Iphone 如何在不激活UISearchDisplayController的情况下在UISearchBar中设置文本,iphone,ios,uisearchdisplaycontroller,Iphone,Ios,Uisearchdisplaycontroller,我正在应用程序中使用UISearchDisplayController。当用户在返回的搜索结果中选择一个项目时,我将停用UISearchDisplayController。停用控制器将清除用户键入的文本。我想把它放在那里。我可以在停用控制器后再次设置文本,将文本强制返回UISearchBar 像这样: NSString* searchText = self.searchDisplayController.searchBar.text; [self.searchDisplayController

我正在应用程序中使用UISearchDisplayController。当用户在返回的搜索结果中选择一个项目时,我将停用UISearchDisplayController。停用控制器将清除用户键入的文本。我想把它放在那里。我可以在停用控制器后再次设置文本,将文本强制返回UISearchBar

像这样:

NSString* searchText = self.searchDisplayController.searchBar.text;
[self.searchDisplayController setActive:NO animated:YES];
self.searchDisplayController.searchBar.text = searchText;
这很有效

但是,如果我没有设置deactivate调用的动画,我会看到一个计时问题。使命感 像这样:

NSString* searchText = self.searchDisplayController.searchBar.text;
[self.searchDisplayController setActive:NO animated:NO];
self.searchDisplayController.searchBar.text = searchText;
使UISearchDisplayController再次变为活动状态


是否有一种方法可以设置UISearchBar的文本,而无需激活与关联的UISearchDisplayController?有没有其他建议可以避免这种行为?

在苹果的内部论坛上,有人提出了一种解决方法,在UISearchDisplayController停用时,将搜索栏的占位符文本设置为最后一个搜索文本。它出现在盒子里,但它变灰了。不理想,但可能可以接受。

对于任何想知道如何做到这一点的人,我通过在我的代表中添加以下内容,设法使其正常工作:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    if(!controller.isActive){
        controller.searchResultsTableView.hidden = YES;
        return NO;
    }
    controller.searchResultsTableView.hidden = NO;

    [....]

    return YES;
}

亚伦回答很好。一种更简单的方法,通过编辑您的代码:

NSString* searchText = self.searchDisplayController.searchBar.text;
[self.searchDisplayController setActive:NO animated:NO];
self.searchDisplayController.delegate = nil;
self.searchDisplayController.searchBar.text = searchText;
self.searchDisplayController.delegate = self; //or any delegate you like!
这样,在设置搜索栏文本时不会触发任何代理函数