searchDisplayController: change the label "No Results"
Asked Answered
P

2

7

how do I change the label "No Results", when using a searchDisplayController?

Regards

Pentarchy answered 22/7, 2009 at 13:27 Comment(0)
I
10

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.

Invalidism answered 22/7, 2009 at 18:9 Comment(2)
But when do you do the tweaking? This UILabel pops up in the subviews only after it has been actually displayed...Myosin
I put this in - (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView. It works.Ory
T
14

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;
}
Thinskinned answered 13/5, 2010 at 22:23 Comment(0)
I
10

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.

Invalidism answered 22/7, 2009 at 18:9 Comment(2)
But when do you do the tweaking? This UILabel pops up in the subviews only after it has been actually displayed...Myosin
I put this in - (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView. It works.Ory

© 2022 - 2024 — McMap. All rights reserved.