以编程方式使用UISearchDisplayController

时间:2010-12-04 02:37:20

标签: iphone uisearchdisplaycontroller

我有一个应用程序异步搜索远程API并使用iOS'UISearchDisplayController显示UI。

对于已保存的搜索功能,我一直在尝试以编程方式使用UISearchDisplayController,以便启动搜索,并将用户界面设置为他以前所处的位置。 (即,我正试图调出搜索栏并设置搜索词。)

searchTableViewController.searchDisplayController.searchBar.text = mySearchTerm;
//[...]
[searchTableViewController.searchDisplayController setActive:YES animated:YES];
[searchTableViewController performSearch];

我迄今为止尝试过的代码似乎没有做到这一点。虽然它正确显示搜索栏,设置搜索词并执行搜索,但系统似乎不会以某种方式将其识别为有效搜索。如果我在结果视图中使用我的手指使键盘消失,搜索词将自行重置并且结果消失。

ex1 ex2

帮助表示感谢。谢谢!

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我通过创建ivar NSString * savedSearchString;并在UISearchDisplayController的委托中添加以下方法来解决这个问题。

- (void) searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
{
    // saves search string for next search
    [savedSearchString release];
    savedSearchString = [controller.searchBar.text retain];
    return;
}

- (void) searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller
{
    // shows keyboard and gives text box in searchBar the focus
    [controller.searchBar becomeFirstResponder];

    // shows previous search results
    if ((savedSearchString))
        controller.searchBar.text = savedSearchString;

    return;
}

将行controller.searchBar.text = savedSearchString;添加到searchDisplayControllerWillBeginSearch:会导致搜索字词出现在UISearchBar中,但不会重新加载结果表。

如果存在先前的搜索字符串,则转换有点粗糙。如果我发现没有粗略过渡的更好的实现,我会更新我的答案。