2012-03-07 6 views
7

Tengo una aplicación para iPhone que actualmente estoy creando en XCode 4.3 con Storyboard. Tengo un controlador de vista "raíz" con dos (2) bloqueos en un controlador de vista que contiene un UIWebView. Quiero poder identificar el segue (ya he establecido identificadores únicos para ambos segmentos) para poder "insertar" el contenido correcto en UIWebView, en función de qué segue se activó en el controlador de vista "raíz".¿Cómo manejar dos segmentos que van al mismo controlador de vista?

Creo que tengo que usar el método "prepareForSegue", pero no sé a dónde iría. ¿Dónde puedo encontrar la forma de tratar con dos segmentos que van al mismo controlador de vista? (Lo he buscado en Google y no encontré nada apropiado para mi situación).

Aquí está el código que estoy usando:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"helpSegue"]) { 
     NSLog(@"helpSegue"); 
    } 
    else if ([segue.identifier isEqualToString:@"reportSegue"]) { 
     NSLog(@"reportSegue"); 
    } 
} 

Respuesta

3

Usted no va a llamar -prepareForSegue:sender:, podrás ponerlo en práctica en su controlador de vista. En ella está la anulación de ese método, se puede comprobar identifier propiedad del segue (el segue se pasa como un parámetro):

if ([segue.identifier isEqualToString:@"Segue Numero Uno"]) { 
    // do something here 
} 

que le permite tomar algún tipo de acción en función de la segue está causando la transición. Puede establecer el identificador para cada transición en el editor del guión gráfico.

Actualización: Según el código que proporcionó en su comentario (que he agregado a su pregunta), ahora tiene la idea correcta. En este punto, solo se trata de una buena depuración anticuada. Algunas cosas a comprobar:

  • es el controlador de vista de su guión gráfico (es decir, el que los segues en cuestión plomo a) configuran como una instancia de la clase que implementa este -prepareForSegue:sender:? Verifique el tipo del controlador en el guión gráfico.

  • ¿Las cadenas que utiliza en su código exactamente coinciden con los identificadores que ha establecido para sus segmentos en el guión gráfico? Las mayúsculas, la ortografía, la puntuación y el espacio en blanco cuentan.

  • ¿Se está llamando al método -prepareForSegue:sender:? Pon un punto de quiebre allí y depuración. Si se está llamando, ¿cuál es el identificador del segue que se transfirió? Si no se está llamando, el controlador de vista en el guión gráfico no tiene la clase correcta.

+0

Gracias, gracias, gracias! Eso es exactamente lo que necesitaba ... – SpokaneDude

+0

Vaya ... lo siento, pero no existe el "método seque.identifier.isEqualToString ... pongo - (void) [prepareForSegue en ViewController.m, que es el único controlador en el proyecto código. Hice algo mal? – SpokaneDude

+0

'-isEqualToString:' es un método (no una propiedad) de NSString. La propiedad 'identifier' de UIStoryboardSegue es un NSString *. Así que lo usa como he mostrado en el código anterior, es decir 'BOOL isEqual = [segue.identifier isEqualToString: @" foo "];'. Es cierto que puede usar la sintaxis de puntos para llamar a cualquier método que no tome un parámetro (aunque en realidad solo debería usarlo para las propiedades), pero '-isEqualToString:' * does * toma un parámetro, por lo que la sintaxis del punto está completamente fuera. – Caleb

Cuestiones relacionadas