how do I change the label "No Results", when using a searchDisplayController?
Regards
It's not directly accessible, so you'll have to do it the old fashioned way and manually sift through the subviews of your searchDisplayController.searchResultsTableView
. Here's one example:
UITableView *tableView = self.searchDisplayController.searchResultsTableView;
for( UIView *subview in tableView.subviews ) {
if( [subview class] == [UILabel class] ) {
UILabel *lbl = (UILabel*)subview; // sv changed to subview.
lbl.text = @"My custom string";
}
}
I wouldn't recommend this since you're relying on internal behavior of the searchResultsTableView
which is more than likely going to change at some point, breaking your app. Opening a bug/feature request with Apple would be a good way to go here.
I've successfully removed the label by never having an empty result set.
If there are no results because they're being fetched from the server, reset your data source to a single row, and have it display a blank table view cell.
Additionally, use logic to refeuse to select the "dummy" cell:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *listItem = [self.filteredListContent objectAtIndex:indexPath.row];
if ([listItem isEqualToString:@""]) {
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
}
I've also found it necessary to add "dummy" cell logic into the willSelect
delegate method:
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *listItem = [self.filteredListContent objectAtIndex:indexPath.row];
if ([listItem isEqualToString:@""]) {
return nil;
}
return indexPath;
}
来源:https://stackoverflow.com/questions/1165224/searchdisplaycontroller-change-the-label-no-results