2009-08-10 17 views
7

Tengo un controlador UITabBar que gestiona varios controladores (con SDK 3.0). Uno de estos es un controlador tableView y necesito proporcionar una capacidad de búsqueda usando UISearchDisplayController. Todo mi código está basado en el ejemplo de Apple TableSearch. Sin embargo, al hacer clic en la pestaña, aparece el controlador tableView mostrando su contenido relacionado, pero no aparece searchBar. He comprobado el xib en IB para asegurarme de que todos los puntos de venta están configurados correctamente, pero no importa lo que intente self.searchDisplayController es siempre nulo y la barra de búsqueda no aparece.¿Cómo usar UISearchDisplayController desde un controlador dentro de un controlador UITabBar?

En la práctica, he replicado MainView.xib del ejemplo de TableSearch y configuré la clase de propietario del archivo en la clase de controlador correcta para la pestaña. Las salidas son conjuntos como en el ejemplo MainView.xib. ¿Me estoy perdiendo algún paso importante o estoy haciendo algo mal?

Gracias de antemano.

Respuesta

1

Ok, he encontrado cómo solucionarlo. En mi caso, el problema se debía al hecho de que estaba usando un controlador incrustado dentro del UITabBarController como una de sus pestañas administradas (es decir, como un niño).

Quitar el controlador del UITabBarController, luego agregar un UINavigationController al UITabBarController en su lugar, y finalmente poner mi controlador como hijo del UINavigationController resolvió completamente el problema.

No entiendo por qué esto es así (no hay información relacionada en la documentación, como suele ocurrir); sin embargo, ahora funciona como un encanto. Saludos cordiales.

+0

Esto todavía funciona a partir de noviembre de 2017. Hay un buen diagrama que muestra cómo agregar el UINavigationController a la página de pestañas [aquí] (https://stackoverflow.com/a/37357242/1359088). –

1

yo también tengo este problema :(es la barra de búsqueda conseguir escondido detrás de la tableview?

@unforgiven, ¿Usted intentó esto ...?

searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 40)]; 
[self.tableView setTableHeaderView: searchBar]; 

Esto crea manualmente una barra de búsqueda y funciona. Pero yo estoy haciendo algún error estúpido en la barra de búsqueda del IB que no se presenta a pesar de que mi conexión es perfecta. :-(

Do actualizar este post si se obtiene la respuesta ...

1

tuve un problema similar

Para resolver que tenía que hacer un paso adicional para unforgivens responden En mi semilla principal

1) crear un UITabController 2) Entonces me arrastré un controlador UINavigational en el controlador de pestañas 3) Luego arrastré un UITableViewController al NavigationalController como un niño 4) Luego cambié (3) la clase a mi MyTableWithSearchBarViewController en el inspector - verifique si el nombre de la pluma es correcto y cámbielo si es necesario en el inspector como bien 5) entonces tuvo que eliminar el tableView que IB crea automáticamente en el paso (3). Sólo entonces el espectáculo barra de búsqueda correctamente ...

Si en el paso 3 me arrastré un controlador diferente al escenario oa la izquierda del tableView no sería solamente siempre mostrar la tabla y no la barra de búsqueda

raro

5

Tuve el mismo problema y tropecé con esta solución ...

Si tiene su controlador de vista de tabla (por ejemplo, UISearchDisplayController) anidado en una Barra de pestañas o Controlador de navegación utilizando el Constructor de interfaz, debe configurar el "Nombre de la punta" en la ventana "Inspector de atributos".

El nombre de la punta es el que contiene la vista de tabla y tiene el controlador (por ejemplo, UISearchDisplayController) como propietario del archivo.

1

Tomtrapeze tiene la respuesta correcta si su archivo de punta contiene UITableViewController. Pero, si está cargando el UITableViewController en código, como al presionarlo en la pila de un UINavigationController, la solución es un poco diferente.

Al inicializar el UITableViewController o la subclase, debe usar -initWithNibName: bundle: formulario de inicializador y especificar el nombre de su archivo de punta. Alternativamente, puede usar el estándar -initWithStyle: initializer y establecer manualmente la propiedad nibName antes de que se cargue la vista.

Si la propiedad nibName no está configurada cuando se carga la vista, UITableViewController no utilizará la lógica de búsqueda de la punta de UIViewController normal. Simplemente cargará una UITableView estándar en su lugar.

0

Otra posible solución que funciona para mí es inicializar el UITableViewController con initWithNibName: paquete:

SearchEntryTableViewController* searchEntryTableViewController = [[SearchEntryTableViewController alloc]initWithNibName:@"SearchEntryTableViewController" bundle:nil]; 

Para anidar la UITableViewController en un UINavigationController antes de ponerlo en un UITabBarController no soluciona el problema para mí. ..

1

Recientemente descubrí que podía cargar archivos NIB con [[MyViewController alloc] initWithNibName:nil bundle:nil]; cuando el archivo NIB tiene el mismo nombre que la clase (es decir, MyViewController.xib). Resulta que la inicialización de esta manera hace que el 'UISearchBar and UISearchBarDisplayController` no se muestre. Cuando inicialicé el controlador de vista escribiendo realmente el nombre de la clase, mi barra de búsqueda apareció correctamente. Inicialmente pensé que tenía algo que ver con la presentación del controlador de vista, pero me alegré de que no fuera así.

PGWSearchViewController *searchVC = [[PGWSearchViewController alloc] initWithNibName:@"PGWSearchViewController" bundle:nil]; 

searchVC.modalPresentationStyle = UIModalPresentationFullScreen; 
searchVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 

[self presentViewController:searchVC animated:YES completion:^{ }]; 

Esto está usando iOS SDK 5.1 y XCode 4.3.1.

+0

Sí, las cosas están mucho mejor ahora, con SDK 5.1. –

Cuestiones relacionadas