2012-01-24 33 views
12

Dependiendo de un retorno XML, no quiero que el actual segue funcione en UIButton touch.ios segue "cancelar"

Sé que puedo elegir qué segue Quiero realizar , pero cómo puedo hacer una segueno realizan? O al menos no realizar cualquiera de los disponibles segues?

Respuesta

25

Si su destino de despliegue es iOS 6.0 o posterior, puede anular the -[UIViewController shouldPerformSegueWithIdentifier:sender:] method para devolver YES si desea realizar el segue y NO si no lo hace.

Si su destino de despliegue es anterior a iOS 6.0, no recibirá el mensaje shouldPerformSegueWithIdentifier:sender:. Entonces, en su guión gráfico, no dibuje la transición desde el botón. En su lugar, dibuje la transición desde el controlador de vista del botón y déle a la segue un identificador. Conecte el botón a IBAction en su controlador de vista. En la acción, verifique si desea realizar el cambio. Si desea realizarlo, envíese a sí mismo performSegueWithIdentifier:sender:, pasando el identificador que asignó a la transición en el guión gráfico.

+0

es ' [self performSegueWithIdentifier: @ "myIdentifier" remitente: self]; '¿correcto? Xcode me da un 'SIGABRT' :( – Jacksonkr

+0

Necesita establecer un punto de interrupción de excepción para ver qué está fallando. –

3

Apple Developer Documentation tiene el método correcto para cancelar un segue que se maneja dentro de la Historieta:

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

Por ejemplo:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    if ([identifier isEqualToString:@"listPopover"]) { 
     if (self.listPopover == nil) { 
      // Allow the popover segue 
      return YES; 
     } 
     // Cancel the popover segue 
     return NO; 
    } 
    // Allow all other segues 
    return YES; 
} 
+0

El mensaje' shouldPerformSegueWithIdentifier: remitente: 'se agregó en iOS 6 y no se enviará a dispositivos que ejecuten una versión anterior de iOS Cuando se publicó esta pregunta, iOS 6 no se había lanzado. –