Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change the searchDisplayController table view style to grouped?

I have a searchDisplayController that searches a UITableView.

After entering the search terms, I can see another UITableView that contains the search results. However, I want this UITableView to be GROUPED, not PLAIN (like it is by default).

How do I do this?

like image 745
Noam Avatar asked Sep 26 '10 05:09

Noam


Video Answer


3 Answers

This worked for me (iOS 5.0):

self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
[self.searchController setValue:[NSNumber numberWithInt:UITableViewStyleGrouped]
        forKey:@"_searchResultsTableViewStyle"];
like image 160
Steve Dekorte Avatar answered Sep 28 '22 04:09

Steve Dekorte


If - like me - you think the plain TableView was way too ugly, you can also abandon the use of SearchDisplayController.

I just:

  • inserted in an empty View a searchBar and a TableView as we usually do for IBOutlet
  • selected the File's owner as delegate for both of them.
  • At the beginin the number of section is 0 ([myTab count]) then I used reloadData and this time myTab is populated by the result.
  • [self.resultTableView reloadData];

Here you can find all the method I used from the delegates

@interface MyViewController : UIViewController <UIApplicationDelegate, UISearchBarDelegate> {

    IBOutlet UISearchBar *searchBar;
    IBOutlet UITableView *resultTableView;
}

@property (nonatomic, retain) IBOutlet UISearchBar *searchBar;
@property (nonatomic, retain) IBOutlet UITableView *resultTableView;

  //For your searchBar the 2 most important methods are
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBarClicked;
- (BOOL)searchBarTextDidEndEditing;


  //For your TableView the most important methods are in my case:

    //number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
    //HEADERS
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
    //different numbers of row by section
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
    //the cells themselves
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

@end

After all, the simplest solution is often the best...

like image 43
chriscatfr Avatar answered Sep 28 '22 03:09

chriscatfr


This works for me:

Create a class which extends UISearchDisplayController:

@interface RVSearchDisplayController : UISearchDisplayController
@end

@implementation RVSearchDisplayController

-(UITableView *) searchResultsTableView {
    [self setValue:[NSNumber numberWithInt:UITableViewStyleGrouped]
            forKey:@"_searchResultsTableViewStyle"];
    return [super searchResultsTableView];
}

@end

Then add a UISearchDisplayController to your table using IB, and change its Custom Class to RVSearchDisplayController in Identity Inspector.

like image 31
Matthew Avatar answered Sep 28 '22 05:09

Matthew