searchdisplaycontroller:更改搜索栏的文本

时间:2010-03-04 10:12:30

标签: iphone objective-c uisearchdisplaycontroller searchdisplaycontroller

问题简述: 我想设置搜索栏的文本而不自动触发绑定到它的搜索显示控制器。

问题的长期描述: 我有一个带有搜索栏和搜索显示控制器的iphone应用程序。 searchdisplaycontroller用于自动完成。对于自动完成,我使用sqlite数据库。用户输入关键字的前几个字母,结果显示在searchdisplaycontroller的表中。对每个键入的字符执行sql select查询。这部分工作正常,输入了字母,结果可见。

问题如下:如果用户从表中选择一行,我想将搜索栏的文本更改为在自动填充结果表中选择的文本。我也想隐藏搜索显示控制器。这不起作用。搜索显示控制器消失后,搜索栏中的文本框为空。我不知道出了什么问题。我没想到这么简单,因为更改文本框的文本会变得如此复杂。

我试过改变2种方法中的文字: 首先在didSelectRowAtIndexPath方法中(对于搜索显示控制器的搜索结果表),但这没有帮助。当搜索显示控制器处于活动状态(动画离开)时,文本就在那里,但之后文本框为空。

 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"didSelectRowAtIndexPath");

    if (allKeywords.count > 0)
    {
        didSelectKeyword = TRUE;
        self.selectedKeyword = (NSString *)[allKeywords objectAtIndex: indexPath.row];
        NSLog(@"keyword didselectrow at idxp: %@", self.selectedKeyword);

        shouldReloadResults = FALSE;

        [[self.mainViewController keywordSearchBar] setText: selectedKeyword];

        //shouldReloadResults = TRUE;

        [[mainViewController searchDisplayController] setActive:NO animated: YES];
    }
}

我也尝试在searchDisplayControllerDidEndSearch方法中更改它,但这也没有帮助。文本框再次......空了。

编辑:实际上它不是空的文本在那里,但在消失的动画后,自动完成表的结果仍然存在。所以最终会变得更糟。


- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller
{
    NSLog(@"searchDisplayControllerDidEndSearch");
    if (didSelectKeyword)
    {
        shouldReloadResults = FALSE;
        NSLog(@"keyword sdc didendsearch: %@", selectedKeyword);

        [[mainViewController keywordSearchBar] setText: selectedKeyword]; //

In this method i call another method which selects the data from sqlite. This part is working.


- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    NSLog(@"shouldReloadResults : %i", shouldReloadResults);
    if (shouldReloadResults)
    {
        NSLog(@"shouldReloadTableForSearchString: %@", searchString);
        [self GetKeywords: searchString : @"GB"];
        NSLog(@"shouldReloadTableForSearchString vege");
        return YES;
    }
    return NO;
}

请问我是否不清楚我的问题是什么。我需要你的帮助。谢谢

2 个答案:

答案 0 :(得分:1)

你没试过: mainViewController.searchDisplayController.searchBar.text=selectedKeyword;

您可以从搜索控制器访问搜索栏字段,并更新其文本内容。

答案 1 :(得分:0)

现在它起作用我不知道发生了什么。我想我在更改文本后尝试停用搜索显示控制器。无论如何,谢谢你的帮助。我想我也尝试改变原始文本字段而不是属于搜索显示控制器的文本字段并且它们是不同的(就我观察到的内存中的不同地址)


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //NSLog(@"didSelectRowAtIndexPath");

    if (allKeywords.count > 0)
    {
        didSelectKeyword = TRUE;

        self.selectedKeyword = (NSString *)[allKeywords objectAtIndex: indexPath.row];
        NSLog(@"keyword didselectrow at idxp: %@", self.selectedKeyword);

        //shouldReloadResults = FALSE;

        [[mainViewController searchController] setActive:NO animated: YES];

        [mainViewController.searchController.searchBar setText: self.selectedKeyword];

    }
}