2013-09-27 81 views
3

我正在使用UISearchDisplayController在tableview中顯示搜索結果。如果搜索結果是空的,我隱藏了UISearchDisplaycontroller的searchResultTableView。它的工作正常,直到iOS 6.0,但沒有在iOS 7中。 我正在尋找一些解決方案,但不幸的是我還沒有找到它。 我使用下面的語句來隱藏searchResultTableViewUISearchDisplayController searchResultsTableView不隱藏在iOS7中

self.searchDisplayController.searchResultsTableView.hidden = YES;

以下是屏幕截圖中的iOS 6和iOS 7

enter image description hereenter image description here

編輯:

我使用以下UISearchDisplayController委託方法

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller 
shouldReloadTableForSearchString:(NSString *)searchString 
{ 
[self filterContentForSearchText:searchString 
          scope:[[self.searchDisplayController.searchBar scopeButtonTitles] 
            objectAtIndex:[self.searchDisplayController.searchBar 
               selectedScopeButtonIndex]]]; 
return YES; 
} 


-(BOOL)searchDisplayController:(UISearchDisplayController *)controller 
shouldReloadTableForSearchScope:(NSInteger)searchOption 
    { 
[self filterContentForSearchText:[self.searchDisplayController.searchBar text] 
          scope:[[self.searchDisplayController.searchBar scopeButtonTitles] 
            objectAtIndex:searchOption]]; 
return YES; 
} 


-(void)filterContentForSearchText:(NSString *)searchText scope:(NSString *)scope{ 
[Appdelegate.arrFilteredDrugSummary removeAllObjects]; 
[Appdelegate.arrFilteredDrugID removeAllObjects]; 

for (DrugDetails *drug in Appdelegate.arrDrugSummary) 
{ 
    NSPredicate *predicate = [NSPredicate predicateWithFormat: 
           @"(SELF BEGINSWITH [cd] %@)", searchText]; 
    if(![drug.tradeName isEqual:[NSNull null]]) 
    { 
     [drug.tradeName compare:searchText options:NSCaseInsensitiveSearch]; 
     BOOL resultTradeName; 
     if((resultTradeName = [predicate evaluateWithObject:drug.tradeName])) 
     { 
      if (![Appdelegate.arrFilteredDrugID containsObject:drug.ID]) 
      { 
       [Appdelegate.arrFilteredDrugSummary addObject:drug]; 
       [Appdelegate.arrFilteredDrugID addObject:drug.ID]; 
      } 
     } 
    } 
} 
if (![Appdelegate.arrFilteredDrugSummary count]) 
{ 
    [self.btnAddNewDrug setHidden:NO]; 
    self.tblview.hidden=YES; 
    self.searchDisplayController.searchResultsTableView.hidden = YES; 
} 
else 
{ 
    [self.btnAddNewDrug setHidden:YES]; 
    self.tblview.hidden=NO; 
    self.searchDisplayController.searchResultsTableView.hidden = NO; 
} 
[self.searchDisplayController.searchResultsTableView reloadData]; 
} 
+0

你在哪裏調用這行代碼?如果你還沒有把它移到'searchDisplayController:didShowSearchResultsTableView:'你可能想嘗試移動它。順便說一句...我在iOS 7上遇到了很多與UISearchDisplayController有關的問題,我只是將它完全剝離出來,並編寫了執行這項工作所需的自定義代碼,並在沒有它的情況下與UISearchBar進行交互。 – smileyborg

+0

@smileyborg:我編輯了我的問題,並在代碼中添加了隱藏searchResultTableView的代碼。你能否建議我哪裏出錯了。 – Mahesh

+0

@smileyborg:我按照你的建議添加了searchDisplayController:didShowSearchResultsTableView:方法。它解決了問題,但遇到了另一個問題。我沒有獲得「不要看到它?請問我們!」的點擊事件iOS 7中的按鈕。 – Mahesh

回答

0

我我也面臨同樣的問題。您可以通過這種方式

- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView 
{ 
    self.searchDisplayController.searchResultsTableView.hidden = YES; 
} 

從它克服。如果任何結果發現然後使用此代碼解僱searchDisplayController

if (yourArray.count != 0) 
{ 
    // reload your table here 
    [self.searchDisplayController setActive:NO animated:YES]; 
    self.searchDisplayController.searchResultsTableView.hidden = YES; 
} 

OR

如果搜索結果發現,你可以通過使用此代碼隱藏searchDisplayController

[self searchBarCancelButtonClicked:searchBar]; 

它會叫的UISearchBar searchBarCancelButtonClicked代表和

- (void)searchBarCancelButtonClicked:(UISearchBar *)_searchBar { 

    if (yourArray.count == 0) { 
     self.searchDisplayController.searchResultsTableView.hidden = YES; 
    } 
    else 
    { 
     self.searchDisplayController.searchResultsTableView.hidden = NO; 
    } 
} 

我希望它會幫助你...!

+0

感謝Chandan的回覆..!它在iOS7上工作正常嗎?其實我無法解決問題,所以我刪除了UISearchDisplayController並實現了UISearchBar委託方法來完成我的任務。我肯定會按照你的建議試用它。 – Mahesh

+0

對不起,延遲迴復,但我現在面臨這個問題。和是的Mahesh,它在這裏完美地工作。如果你使用UISearch Bar,那麼你可以強制完全調用取消searchBarCancelButtonClicked degegate並執行任何你想要的。 – chandan

0

你知道如果搜索欄有焦點。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if ([_searchBar isFirstResponder]) { 
       return [_filteredData count]; 
    } else { 

     id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; 
     return [sectionInfo numberOfObjects]; 

    } 
} 

在配置電池做了同樣的問題

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *CellIdentifier = @"CustomCell"; 
    CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    // Configure the cell... 
    if (cell == nil) { 
     cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    Entidad *e = nil; 

    if ([_searchBar isFirstResponder]) 
    { 
     e = [self.filteredData objectAtIndex:indexPath.row]; 

    } 
    else 
    { 
     e = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    } 

    cell.nameLabel.text = e.titulo; 
    cell.thumbnailImageView.image = [UIImage imageNamed:@"password-50.png"]; 
    cell.dateLabel.text = e.sitio; 

    return cell; 
} 

設置過濾參數

-(void)filter:(NSString*)text 
{ 

    _filteredData = [[NSMutableArray alloc] init]; 


    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 


    NSEntityDescription *entity = [NSEntityDescription 
            entityForName:@"Entidad" inManagedObjectContext:self.managedObjectContext]; 
    [fetchRequest setEntity:entity]; 


    NSSortDescriptor* sortDescriptor = [[NSSortDescriptor alloc] 
             initWithKey:@"titulo" ascending:YES]; 
    NSArray* sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
    [fetchRequest setSortDescriptors:sortDescriptors]; 


    if(text.length > 0) 
    { 

     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(titulo CONTAINS[c] %@)", text]; 
     [fetchRequest setPredicate:predicate]; 
    } 

    NSError *error; 


    NSArray* loadedEntities = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error]; 
    _filteredData = [[NSMutableArray alloc] initWithArray:loadedEntities]; 

    NSLog(@"%@", _filteredData); 

    [self.tableView reloadData]; 
} 

-(void)searchBar:(UISearchBar*)searchBar textDidChange:(NSString*)text 
{ 
    [self filter:text]; 
} 

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{ 

    [self filter:@""]; 

    [_searchBar resignFirstResponder]; 
    [_searchBar setText:@""]; 
    [_tableView reloadData]; 
} 

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 
{ 

    [_searchBar setShowsCancelButton:YES animated:YES]; 
} 

-(void)searchBarTextDidEndEditing:(UISearchBar *)searchBar 
{ 
    [_searchBar setShowsCancelButton:NO animated:YES]; 
} 

我希望能爲您服務,我的英語是非常有限的

相關問題