9

Tengo un UIViewController que tiene un UITableView como propiedad. Instancia el UITableView en el código y no uso IB. Me gustaría conectar un UISearchDisplayController pero no encuentro ningún ejemplo de cómo se puede hacer esto.Cómo implementar UISearchDisplayController en un UIViewController sin Interface Builder

Esto es lo que tengo. // han implementado el UISearchDisplayDelegate en el archivo de cabecera

//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, el hotel fenomenal searchDisplayController del UIViewController parece ser de sólo lectura y no puede enganchar myDisplayController en la misma. Realmente no estoy seguro de si esta es la forma 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 usando IB, que no es la forma en que quiero usarlo.

¿Alguien puede explicar cómo podría hacer que esto funcione?

Respuesta

23

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]; 
+4

¿Qué es la búsquedaController en su código? –

+0

Es una instancia de UISearchDisplayController – Rayfleck

+0

@luyuan: creo que 'searchController' es el objeto' UISearchDisplayController' y @Rayfleck olvidó hablar de ello. Puede crear 1 objeto 'UISearchDisplayController' como' UISearchDisplayController' de 'UIViewController'. Funcionará igual que 'UIViewController' – VietHung

5

Consulte la documentación de Apple:

@property(nonatomic, readonly, retain) UISearchDisplayController *searchDisplayController 

Discusión: Esta propiedad refleja el valor de la salida de searchDisplayController que se establece en el Interface Builder. Si crea su controlador de pantalla de búsqueda mediante programación, esta propiedad es establecida automáticamente por el controlador de visualización de búsqueda cuando se inicializa.

+0

No entiendo, "Si crea su controlador de pantalla de búsqueda programáticamente", ¿qué significa esto? – jeswang

Cuestiones relacionadas