5

我的應用使用UISearchDisplayController。當用戶輸入搜索詞時,我希望它在搜索欄中保持可見。如果用戶選擇了其中一個匹配的結果,那麼這將起作用,但如果用戶單擊「搜索」按鈕則不起作用。當UISearchDisplayController處於非活動狀態時,保持搜索字詞可見

這工作:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     NSString *selectedMatch = [self.searchMatches objectAtIndex:indexPath.row]; 
     [self.searchDisplayController setActive:NO animated:YES]; 
     [self.searchDisplayController.searchBar setText:selectedMatch]; 

     return; 
    } 
    ... 

但是,如果我做同樣的事情在-searchBarSearchButtonClicked:文本不會保留在搜索欄。關於在這種情況下如何完成此任何想法?

相關的,如果我設置了搜索欄的文本(但是保持UISearchDisplayController不活動),這會觸發searchResultsTableView的顯示。我只想顯示當用戶點擊搜索欄時。

編輯:找到一個解決辦法來設置搜索欄的文本不顯示在任何時候searchResultsTableView:

// This hacky YES NO is to keep results table view hidden (animation required) when setting search bar text 
[self.searchDisplayController setActive:YES animated:YES]; 
[self.searchDisplayController setActive:NO animated:YES]; 
self.searchDisplayController.searchBar.text = @"text to show"; 

更好的建議,歡迎仍然!

回答

7

實際上,您不能在searchBarSearchButtonClicked方法中使用相同的代碼,因爲您沒有indexPath可以在您的searchMatches數組中選擇正確的元素。

如果用戶單擊搜索按鈕並且想要隱藏searchController界面,則必須找出要在搜索中放置哪些文本(例如,在列表中選擇最佳匹配結果)。

這個例子只是讓搜索項保持可見和不變的,當用戶點擊搜索按鈕:

-(void) searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    NSString *str = searchBar.text; 
    [self.searchController setActive:NO animated:YES]; 
    self.searchController.searchBar.text = str; 
} 

希望這有助於 文森特

+0

啊謝謝!我在做`[self.searchController setActive:NO animated:YES]; self.searchController.searchBar.text = searchBar.text;`但顯然`searchBar.text`不再是我認爲這是由於`setActive`方法清空搜索欄。 – 2011-01-21 07:25:01

3

重置手動在搜索欄的字符串觸發一些的UISearchDisplayDelegate方法。在這種情況下,這可能不是你想要的。

我將修改vdaubry回答了一下,它給了我:

-(void) searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    NSString *str = searchBar.text; 
    [self.searchController setActive:NO animated:YES]; 
    self.searchController.delegate = nil; 
    self.searchController.searchBar.text = str; 
    self.searchController.delegate = self //or put your delegate here if it's not self! 
} 
相關問題