0

现在我正在 iOS 中创建字典应用程序。在我的应用程序中,我使用 UISearchBar 的 textDidChange 事件和 UISearchDisplayController 进行自动完成搜索。

所以当我在 SearchBar 中输入一个词时,它会自动在数据库中搜索。但是我在首选项中有一个功能可以关闭自动完成搜索。在我关闭首选项中的自动完成功能后,它仍然是使用 TextDidChange 事件自动完成搜索。

这次我不想要 TextDidChange 事件。我想在搜索栏中输入完整的单词后进行搜索,然后从键盘单击搜索按钮。

那么如何从 UISearchBar 关闭 TextDidChange 事件呢?如果你还好,请告诉我。

此致,

4

3 回答 3

2

在您的情况下,您不想抑制 textDidChange 事件。相反,您希望 UISearchDisplayDelegate 的shouldReloadTableForSearchString:方法返回NO,除非单击了“搜索”按钮。

您可以创建一个布尔 ivar 来跟踪这一点。调用时将 ivar 设置为 NO,textDidChange调用时将其设置为 YES searchBarSearchButtonClicked:。然后在你的shouldReloadTableForSearchString:你可以做测试。

编辑:通过扩展代码示例进行澄清。(在本例中,我假设您设置了一个名为 isSearchButtonClicked 的 ivar)。

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    isSearchButtonClicked = NO;
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    isSearchButtonClicked = YES;
}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    // returns YES if search button was clicked, otherwise return NO
    return isSearchButtonClicked;
}
于 2012-04-16T15:15:19.273 回答
1

您始终可以创建一个 bool 变量并检查是否启用了自动完成功能...根据您是否可以搜索。

于 2012-04-16T15:00:50.937 回答
1
     - (void)filterContentForSearchText:(NSString*)searchText 
                         scope:(NSString*)scope
       {
            //create a bool variable and check is Auto Complete searching is Yes or No

            if YES then pass  searchText 

            if no then Don't pass any thing unit user press the search button 

            after he press search button pass  searchText 
       }
于 2012-04-16T17:07:40.110 回答