テーブルビューで検索結果を表示するために UISearchDisplayController を使用しています。検索結果が空の場合、UISearchDisplaycontroller の searchResultTableView を非表示にしています。iOS 6.0 までは問題なく動作していましたが、iOS 7 では動作しませんでした。解決策を探していますが、残念ながらまだ見つかりませんでした。次のステートメントを使用して searchResultTableView を非表示にしています
self.searchDisplayController.searchResultsTableView.hidden= はい;
以下は、iOS 6 と iOS 7 のスクリーン ショットです。
編集:
私は次の 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];
}