Pregunta

¡Saludos! Tengo una aplicación para iPhone que funciona (¡huzzah!) Que utiliza un MainView.xib que contiene una UITabBar completamente surtida con varios objetos y vistas UINavigationController en listo para usar.

Ahora se me ha pedido que agregue una vista de registro única a esta mezcla. Esta vista aparecería antes de la UITabBar en el inicio de la aplicación, obtener información del usuario, registrarse en un servidor, o buscar un registro existente, luego recuperar algunos datos en el llavero (Si el llavero ya muestra una prueba de registro, omitimos mostrar esta vista en particular).

La parte de registro y llavero que tengo bajo control ( ¡gracias Erica Sadun por lo último! ), pero mostrar que la vista inicial única es más complicada de lo que esperaba.

Sospecho que estoy demasiado cerca del problema para ver qué pasa. ¡Realmente espero que sea un error piloto y no requiera nada también Rube Goldberg!

Aquí está el escenario:

La aplicación comienza cargando MainView.xib , en el que se encuentra el controlador UITabBar mencionado anteriormente, et. Alabama. En aras de la discusión, digamos que debemos mostrar esa vista de registro. Además, nos gustaría que tenga una apariencia modal, por lo que volará de abajo hacia arriba. Luego, cuando hayamos terminado, podemos descartarlo, llamar a un delegado (probablemente el Delegado de la aplicación) y decirle que continúe con la UITabBar original.

// Normally, the Tab Bar Controller's view is added to the window ... still do this?
[window addSubview:tabBarController.view];

// We could now set up a VC like so. Mostly harmless. (I know, "mvc" is an unfortunate abbreviation in this case.)
RegistrationVC *mvc = [[RegistrationVC alloc] initWithNibName:@"RegistrationView" bundle:nil];

Tenga en cuenta que RegistrationView.xib tiene un UIView dentro, pero no tiene un controlador de navegación. Queremos mantenerlo desacoplado para que pueda reutilizarse, por ejemplo, como parte del controlador de navegación de un elemento de la barra de pestañas (para revisar su información de registro, por ejemplo).

Siguiendo adelante. Creamos un controlador de navegación con la intención de presentar las cosas modalmente:

UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:mvc];

Luego presentamos nuestro VC modal, utilizando el controlador de barra de pestañas como base, y liberamos los bits asignados.

[tabBarController presentModalViewController:nc animated:YES];
[nc release];
[mvc release];

Primera observación. Algo me dice que esto es simplemente descuidado. Puede ver la barra de navegación y la vista del primer elemento de la barra de pestañas aparecer justo cuando la vista modal se desploma. Además, intentar establecer el VC seleccionado en cero de antemano no tiene ningún efecto:

 tabBarController.selectedViewController = nil;

Realmente no queremos / necesitamos usar la barra de pestañas hasta después de que el VC modal esté listo (y tenemos el delegado para ayudarnos a avisarnos cuándo sucede eso).

¿Por qué me molesto con la barra de pestañas? Bueno, parece que necesito algo para colgar el sombrero de ese VC modal, y no sé qué más hay que usar.

¿Es esta la única forma? Simplemente parece unir innecesariamente el VC de registro y la barra de pestañas, y huele ... mal.

¡Pistas bienvenidas / apreciadas!

¿Fue útil?

Solución

Es difícil responder esto sin saber lo que muestra su Default.png. Suponiendo que está siguiendo el HIG y muestra una pestaña vacía BarBarController, sugeriría una estratificación algo complicada: vista inferior: tabBarController.view vista del medio: UIImageView: Default.png vista superior: vista de registro ubicada debajo de la parte inferior de la pantalla

En el inicio, si necesita mostrar la vista de registro, anímela manualmente hacia arriba, y una vez que la animación haya terminado, elimine el UIImageView debajo de él. Cuando se complete el registro, anime manualmente la vista de registro hacia abajo para revelar el tabBarController. Si en el inicio no necesita la vista de registro, solo anime el UIImageView para desaparecer (o simplemente elimínelo).

OTOH mano, si no estás siguiendo el HIG y, en cambio, estás mostrando algún tipo de pantalla de inicio, las cosas se vuelven un poco más fáciles. Capa como esta: vista inferior: tabBarController.view vista superior: UIImageView: Default.png

Si necesita mostrar el registro, presenteModalViewController con animado: NO y luego desvanezca el UIImageView. Si no, simplemente desvanece el UIImageView.

Esa es una larga explicación sin fotos, espero que tenga sentido. El punto principal es que sugiero agregar un UIImageView: Default.png para que sea lo primero que se ve cuando se inicia la aplicación, y usarlo para guiar su transición al registro o tabBarController según corresponda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top