UISearchDisplayController
de créer un UISearchDisplayController
programme. J'ai une méthode qui devrait mettre en place mon controller de search, mais quand je l'appelle, rien ne se passe.
Cette méthode ma -setupSearch
:
- (void)setupSearch { UISearchBar *myBar; UISearchDisplayController *myCon; myBar = [[UISearchBar alloc] initWithFrame:CGRectZero]; [myBar sizeToFit]; myCon = [[UISearchDisplayController alloc] initWithSearchBar:myBar contentsController:self]; [myBar release]; myCon.delegate = self; myCon.searchResultsDataSource = self; myCon.searchResultsDelegate = self; /* Setup scopes */ { NSMutableArray *scopes; NSUInteger count, i; NSSsortingng *aScope; count = SCOPE_COUNT; scopes = [[NSMutableArray alloc] initWithCapacity:count]; for(i = 0; i < count; i++) { // I create four scopes here } myCon.searchBar.scopeButtonTitles = scopes; [scopes release]; } [myCon release]; }
J'appelle la méthode ci-dessus dans la méthode -viewDidLoad
de mon UITableViewController
sous- UITableViewController
. Malheureusement rien ne se passe quand mon controller de vue de table est affiché dans un UITabBarController
.
Toute aide serait grandement appréciée.
Consultez l'exemple de code dans: [ https://github.com/JayMarshal/GrabCasts.com-iPhone-Client/blob/master/CoreDataTableViewController.m%5D%5B1%5D
Repo ici: https://github.com/JayMarshal/Grabcasts
C'est une version augmentée du coredatatableviewcontroller des cours de stanford iOS.
Un extrait pertinent de ce code suit:
- (void)createSearchBar { if (self.searchKey.length) { if (self.tableView && !self.tableView.tableHeaderView) { UISearchBar *searchBar = [[[UISearchBar alloc] init] autorelease]; self.searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; self.searchDisplayController.searchResultsDelegate = self; self.searchDisplayController.searchResultsDataSource = self; self.searchDisplayController.delegate = self; searchBar.frame = CGRectMake(0, 0, 0, 38); self.tableView.tableHeaderView = searchBar; } } else { self.tableView.tableHeaderView = nil; }
Fondamentalement, il associe UISearchDisplayController à self (qui doit être un tableviewcontroller) comme un effet secondaire de l'initialisation. Donc, réglage:
self.searchDisplayController.searchResultsDelegate = self; self.searchDisplayController.searchResultsDataSource = self;
Au lieu de
myCon.searchResultsDataSource = self; myCon.searchResultsDelegate = self;
Ça pourrait faire l'affaire. Dans le debugging, vérifiez si myCon et self.searchDisplayController pointent vers le même object?
Mise à jour: il semble y avoir un bug dans la propriété SDC de la TVC qui ne soit pas conservé dans le runloop. Classé comme: http://openradar.appspot.com/10254897 également mentionné sur SO, voir UIViewController ne conserve pas son UISearchDisplayController créé par programmation