iphone - searchcontroller - Cómo implementar UISearchDisplayController en un UIViewController sin Interface Builder
uisearchcontroller ios (2)
Aquí está el código que uso. Pon esto en viewDidLoad de un UIViewController que ejemplifica su propio UITableView. Creo que la parte que está buscando es agregar la barra de búsqueda como vista de encabezado de la vista de tabla.
UISearchBar * theSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0,0,320,40)]; // frame has no effect.
theSearchBar.delegate = self;
if ( !searchBarPlaceHolder ) {
searchBarPlaceHolder = @"What are you looking for?";
}
theSearchBar.placeholder = searchBarPlaceHolder;
theSearchBar.showsCancelButton = YES;
self.theTableView.tableHeaderView = theSearchBar;
UISearchDisplayController *searchCon = [[UISearchDisplayController alloc]
initWithSearchBar:theSearchBar
contentsController:self ];
self.searchController = searchCon;
[searchCon release];
searchController.delegate = self;
searchController.searchResultsDataSource = self;
searchController.searchResultsDelegate = self;
[searchController setActive:YES animated:YES];
[theSearchBar becomeFirstResponder];
Tengo un UIViewController
que tiene una UITableView
agrupada como una propiedad. I instancia el UITableView
en código y no uso IB. Me gustaría conectar un UISearchDisplayController
a él, pero no puedo encontrar ningún ejemplo de cómo se podría hacer esto.
Esto es lo que tengo. // Implementé UISearchDisplayDelegate en el archivo de encabezado
//SearchBar
UISearchBar *searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 45)];
searchBar.barStyle=UIBarStyleBlackTranslucent;
searchBar.showsCancelButton=NO;
searchBar.autocorrectionType=UITextAutocorrectionTypeNo;
searchBar.autocapitalizationType=UITextAutocapitalizationTypeNone;
searchBar.delegate=self;
UISearchDisplayController *mySearchDisplayController = [[UISearchDisplayController alloc ]initWithSearchBar:searchBar contentsController:self];
self.searchDisplayController = mySearchDisplayController; //Error here ?? self.searchDisplayController is ReadOnly and can''t assign
[self.searchDisplayController setDelegate:self];
[self.searchDisplayController setSearchResultsDataSource:self];
[mySearchDisplayController release];
[myDisplayController release];
Esto no parece funcionar, la UIViewController
searchDisplayController del UIViewController
parece ser de solo lectura y no puedo conectar myDisplayController
a ella. Realmente no estoy seguro de si esta es la manera correcta de hacerlo.
He estado buscando en todo google para encontrar algún consejo o tutorial sobre cómo usar un UISearchDisplayController
en UIViewController
. Todos los ejemplos que pude encontrar fueron cómo implementarlo en UITableViewController
utilizando IB, que no es la forma en que quiero usarlo.
¿Alguien puede explicar cómo podría hacer que esto funcione?
Ver los documentos de Apple:
@property(nonatomic, readonly, retain) UISearchDisplayController *searchDisplayController
Discusión: esta propiedad refleja el valor de la salida searchDisplayController que estableció en Interface Builder. Si crea su controlador de pantalla de búsqueda mediante programación, el controlador de visualización de búsqueda establece esta propiedad automáticamente cuando se inicializa .