Hello,
how do I change the label "No Results", when using a searchDisplayController?
Regards
Hello,
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*)sv;
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.
Here is another way:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
if (tableView == self.searchDisplayController.searchResultsTableView) {
return @"My custom string";
} else {
return @"";
}
}
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;
}