Estoy tratando de implementar una interfaz de usuario estructurada como en la aplicación Tweetie , que se comporta así: el controlador de vista de nivel superior parece ser un controlador de navegación, cuya vista raíz es una vista de tabla "Cuentas". Si hace clic en cualquier cuenta, pasa al segundo nivel, que tiene una barra de pestañas en la parte inferior. Cada elemento de la pestaña muestra una lista diferente y le permite profundizar más (los niveles posteriores no muestran la barra de pestañas).
Entonces, esto parece que la jerarquía de implementación es:
UINavigationController
- Cuentas :
UITableViewController
UITabBarController
- Tweets :
UITableViewController
- Vista detallada de un tweet / usuario / etc.
- Respuestas :
UITableViewController
- ...
- Tweets :
- Cuentas :
Esto parece funcionar [^ 1], pero parece no ser compatible según la documentación del SDK para -pushViewController:animated:
(énfasis agregado):
viewController : el controlador de vista que se inserta en la pila.No puede ser una instancia del controlador de la barra de pestañas.
Me gustaría evitar las API privadas y similares, pero no estoy seguro de por qué este uso está explícitamente prohibido incluso cuando parece funcionar bien. ¿Alguien sabe la razón?
He pensado en poner el controlador de la barra de pestañas como el controlador principal, con cada una de las pestañas que contienen controladores de navegación separados. El problema con esto es que cada controlador de navegación necesita compartir un solo controlador de vista raíz (es decir, la tabla "Cuentas" en Tweetie ); esto no parece funcionar: empujar el controlador de la tabla a un segundo controlador de navegación parece eliminarlo desde el principio. Sin mencionar toda la contabilidad al seleccionar una cuenta diferente probablemente sería una molestia.
¿Cómo debo implementar esto de la manera correcta?
[^ 1]: El controlador de la barra de pestañas debe tener una subclase para que el elemento de navegación del controlador de la barra de pestañas en ese nivel permanezca sincronizado con el elemento de navegación de la pestaña seleccionada, y la necesidad del controlador de la tabla de la pestaña individual para enviar sus respectivas vistas de detalle a en self.tabBarController.navigationController
lugar de self.navigationController
.