2011-11-19 32 views
12

Estoy diseñando una aplicación de iOS utilizando la característica del guión gráfico de XCode 4.2. La aplicación tiene una pantalla de inicio de sesión que tiene un nombre de usuario y una contraseña, y tiene un botón para iniciar sesión. Al presionar el botón de inicio de sesión, se activa una secuencia de inserción a otro controlador de vista. Sin embargo, quiero que la secuencia espere hasta que el inicio de sesión sea exitoso antes de pasar al siguiente controlador de vista.iOS: haga que la espera continúe para el éxito de inicio de sesión

Sé acerca de prepareForSegue:sender: pero aquí está mi problema: la llamada de inicio de sesión es asincrónica. Por lo tanto, no puedo realizar el inicio de sesión allí.

¿Hay alguna forma de evitar esto? ¿Puedo crear una secuencia en el guión gráfico que solo se activa cuando quiero que sea (en lugar de cuando se hace clic en un botón)?

Respuesta

37

Ok, lo he descubierto. Había definido un segue desde UIButton hasta el siguiente UIViewController. Tal como se define de esta manera, no hay forma de ejecutar condicionalmente el segue.

En lugar de poner el segue en el botón, hice una transición del primer UIViewController al otro UIViewController. Esto define el segue, pero no asocia ninguna acción con él. Desde allí, simplemente puedo llamar al performSegueWithIdentifier:sender: cuando quiero que se ejecute esa segue (en mi caso, cuando se completa la tarea asincrónica).

La principal ventaja de esto para mí es que IB mantiene su estructura.

Muchas gracias a @cli_hlt por señalarme en la dirección correcta (+1).

5

No sé si hay una manera de BI para llevar a cabo tal acción (aunque dudo mucho), así que sugiero utilizar

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender 

en el controlador de la vista cuando su éxito asíncrono señales de inicio de sesión .

+0

Sí, lo vi, solo esperaba que hubiera alguna manera de hacerlo donde no tendría que romper el flujo en IB. – mtmurdock

1

También puede llamar a instantiateViewControllerWithIdentifier en una instancia de UIStoryBoard. Esto devolverá una referencia de controlador de vista a cualquier punto en su guión gráfico. A partir de ahí, puedes presentarlo como quieras y recogerá el flujo de tu guión gráfico.

+0

Eso no aparecería en IB sin embargo. Intentaba mantener el diagrama de flujo en el guión gráfico. Lo que está sugiriendo no mostraría un vínculo entre los dos controladores en IB. Si lees mi respuesta, verás cómo pude hacer esencialmente lo mismo que propones al usar IB para definir la transición. ¡Gracias por el aporte! +1 – mtmurdock

Cuestiones relacionadas