2012-03-23 10 views
6

Estoy trabajando en este tutorial, que muestra cómo crear una aplicación con guiones gráficos. Mi viewController tiene dos UIButtons y he conectado un segue a esos UIButtons. Estos segues empujan un nuevo viewController.Cómo cancelo una transición que está conectada a un UIButton

Ahora estoy buscando una manera de cancelar este segue si una determinada condición se hace realidad. Cuando he usado los antiguos archivos xib para crear la interfaz de mi yo era capaz de hacer algo como esto:

-(IBAction)sendButton:(id)sender { 
    if(TRUE) { 
    // STOP !! 
    } 
} 

Esto ya no funciona. ¿Cómo puedo cancelar el impulso del nuevo ViewController?

+0

Su pregunta no está clara. ¿Cómo se conectan tus elementos? ¿Dónde está el código que hace que la navegación "vaya a una nueva vista"? – Stavash

+0

El usuario puede cancelar manualmente una respuesta de clic arrastrando su dedo fuera del botón antes de soltarlo ... ¿Es esto lo que quiere decir? Estoy de acuerdo con el comentario anterior, esta pregunta no está clara. –

+0

Tienes que leer el tutorial, escondido detrás del enlace, para entender la pregunta. Se trata de un segue del guión gráfico vinculado a un UIButton –

Respuesta

27

Nope. No puede cancelar segmentos que están directamente vinculados a elementos de la interfaz como su UIButton.

Pero hay una solución.

  1. Retire la segue que está vinculado al botón
  2. Añadir un segue de la viewController (el uno con el botón) para el viewController que debe ser empujado. Debe ser una transición que no esté conectada a un elemento de interfaz. Para hacer esto, puede iniciar el cambio desde la barra de estado. O crea el segue en la barra lateral izquierda.
  3. Seleccione esta segue, abra el inspector de atributos y cambiar el identificador de la segue (por ejemplo PushRedViewController)
  4. Seleccionar Xcodes asistente vista, para que pueda ver el archivo .h de la viewController con el botón.
  5. Conecte el botón a una acción. Para hacer esto, seleccione el botón y mantenga presionada la tecla control hacia el archivo .h. Seleccione la acción en el menú y el nombre de su acción (por ejemplo redButtonPressed :)
  6. Abra la implementación de su viewController
  7. cambiar la acción del paso 5 a algo como esto:

    - (IBAction)redButtonPressed:(id)sender { 
        [self performSegueWithIdentifier:@"PushRedViewController" sender:sender]; 
    } 
    
+0

¡Gracias! Funcionó. – Qooe

+2

Ahora es posible para ios5: http: // stackoverflow.com/questions/8066525/prevent-segue-in-preparedforsegue-method –

+0

@Matthias Bauch, ¡¡¡Gracias !!! – shuiyouren

9

Puede en realidad hacer esto mediante la adición siguiente método en el código

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 

if([identifier isEqualToString:@"btnSegue"]) 
{ 

    return YES; 
} 
else{ 
    return NO; 
} 

} 

deja para asumir su segue es btnSegue.And si usted ne ed el segue a ser realizado sobre la base de alguna condición que puede tener siguiente código

if(check) 
{ 
[self performSegueWithIdentifier:@"btnSegue" sender:self]; 
} 

donde el registro es BOOL que puede establecer verdaderas o falsas sobre la base de su condición.

+0

¿Por qué esta no es la respuesta aceptada? – TahoeWolverine

+0

@TahoeWolverine Gracias puedo haber respondido la pregunta un poco tarde :) –

Cuestiones relacionadas