2

我有一個帶有搜索欄的表格視圖,我想在文本爲空時搜索。ios - 當搜索文本爲空時,UISearchDisplayDelegate不搜索

我要顯示所有數據,當搜索文本是空的(當用戶不輸入任何搜索文本)

注 - 事情做工精細,在輸入搜索文本時,問題僅當搜索文本爲空時

不幸的是,當搜索文本爲空時,不會使用self.arForSearch數組的內容。

我甚至嘗試用"p"替換文本,但數據未加載。

問題 如何在用戶未輸入搜索字符串時顯示所有數據?

代碼如下粘貼:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString 
{ 
    if(searchString.length == 0) 
    { 
     searchString = @"p"; 
     NSLog(@"string was empty but was replaced by p"); 
    } 

    [self filterContentForSearchText:searchString]; 

    // Return YES to cause the search result table view to be reloaded. 
    return YES; 
} 

- (void)filterContentForSearchText:(NSString*)str{ 
    // for inCaseSensitive search 
    str = [str uppercaseString]; 

    NSMutableArray *ar=[NSMutableArray array]; 
    for (NSDictionary *d in self.arForTable) { 
     NSString *strOriginal = [d valueForKey:@"name"]; 
     // for inCaseSensitive search 
     strOriginal = [strOriginal uppercaseString]; 

     if([strOriginal hasPrefix:str]) { 
      [ar addObject:d]; 
     } 
    } 
    self.arForSearch=[NSArray arrayWithArray:ar]; 

    NSLog(@"self.arForSearch.count = %i", self.arForSearch.count); 
} 
+0

你有沒有設置委託? – parilogic 2012-07-26 06:36:50

+0

是的,我已經在界面生成器中設置了委託,它似乎在輸入搜索文本時正常工作。 – user1046037 2012-07-26 06:50:45

+0

如果搜索文本不爲空,請發佈您的代碼如何過濾。 – 2012-07-26 07:06:26

回答

1
- (void)filterContentForSearchText:(NSString*)str{ 
// for inCaseSensitive search 
str = [str uppercaseString]; 

if([str isEqualToString:@""] || str == nil) 
{ 
    self.arForSearch=[NSArray arrayWithArray:self.arForTable]; 
} 
else 
{ 
    NSMutableArray *ar=[NSMutableArray array]; 
    for (NSDictionary *d in self.arForTable) { 
     NSString *strOriginal = [d valueForKey:@"name"]; 
     // for inCaseSensitive search 
     strOriginal = [strOriginal uppercaseString]; 

     if([strOriginal hasPrefix:str]) { 
      [ar addObject:d]; 
     } 
    } 
    self.arForSearch=[NSArray arrayWithArray:ar]; 
} 
NSLog(@"self.arForSearch.count = %i", self.arForSearch.count); 

//updated code 
[yourTable reloadData]; 

}

只是檢查空字符串,並添加所有從self.arForTable到self.arForSearch的元素。

希望這有助於...

更新.... ,那麼你可能需要添加行[yourTable reloadData];在刷新表格數據的末尾

+0

感謝Vimal,但這是行不通的。數組被填充的問題,但然後表視圖不會重新加載/顯示它們。 – user1046037 2012-07-26 15:15:18

1

爲了在搜索欄獲得焦點和沒有文本時顯示結果,我寫了下面的代碼。

注意:在我的應用程序中,搜索欄佔位符等於上次插入的搜索文本,因此您可能需要修改下面的代碼。

//auxiliar function to force display of search results 
-(void)forceDisplaySuggestionsForText:(NSString*)searchString { 
    UISearchDisplayController *sdc = self.searchDisplayController; 
    SEL sel = @selector(searchBar:textDidChange:); 
    if([sdc respondsToSelector:sel]){ 
     UISearchBar *sb = sdc.searchBar; 
     [sdc performSelector:sel withObject:sb withObject:searchString]; 
    } 
} 

- (void) searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller { 
    controller.searchBar.text = controller.searchBar.placeholder; 
    //this will force initial display of the search results 
    [self performSelector:@selector(forceDisplaySuggestionsForText:) withObject:controller.searchBar.text afterDelay:0]; 
} 

- (void)filterContentForSearchText:(NSString*)str { 
    //this will force display of results when there is no text in search bar 
    if([str length] == 0){ 
     [self performSelector:@selector(forceDisplaySuggestionsForText:) withObject:@" " afterDelay:0]; 
    } 
    //the rest of the code for content filtering 
    ... 
}