2011-11-24 19 views
6

Me preguntaba cómo usar correctamente el guión gráfico para poner un controlador de vista de manera modal. Personalmente prefiero trabajar con xibs, pero parece que el guión gráfico está ganando popularidad y será el camino a seguir en el futuro.Cómo utilizar correctamente el controlador de vista modal con el guión gráfico de xcode 4.2

La forma en que normalmente pondría un controlador de vista de forma modal sería así: digamos que tenemos ViewControllerA (A para abreviar) y ViewControllerB (B para abreviar). Normalmente pondría un protocolo en B.h especificando el método de delegado cuando B quiere ser descartado y agregue el campo id<theProtocol> delegate como una propiedad assign. Suponiendo que estoy ocupado en A y quiero presentar de forma modal B, escribiría:

B* b = [[B alloc] initWithNibName:@"B" bundle:nil]; 
b.delegate = self; 
[self presentModalViewController:B animated:YES]; 

Usando el guión gráfico, sé que es posible poner un controlador de vista diferente de una manera modal ctrl-arrastrando desde un botón para ver el controlador y seleccionar modal como tipo de transición. Me lo estoy preguntando sin embargo; ¿Dónde configuro el delegado del nuevo controlador de vista? ¿Cuál es la práctica correcta de pasar cosas a su controlador de vista modal? Realmente no sé lo que todo el trato con Segues es ...

Respuesta

5

Tome un vistazo a thistutorial

De acuerdo con ello, se debe configurar el delegado de la siguiente manera:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"AddPlayer"]) 
    { 
     UINavigationController *navigationController = 
      segue.destinationViewController; 
     PlayerDetailsViewController 
      *playerDetailsViewController = 
      [[navigationController viewControllers] 
       objectAtIndex:0]; 
     playerDetailsViewController.delegate = self; 
    } 
} 

Dónde @ "AddPlayer" es el nombre de su transición 'modal'

+1

Miré el tutorial y, obviamente, no tengo ningún beneficio al dudar de su respuesta, pero ¿no estaría de acuerdo en que este es un código mucho más feo que el anterior? Simplemente parece una molestia hacer algo que fue realmente fácil antes ... – Warkst

+1

No uses storyboards si te parece feo –

+1

Esa es la razón principal por la que no los uso ahora, solo "temo" se convertirán en la principal forma de hacerlo en el futuro. – Warkst

0

En lugar de usar el controlador de navegación, puede usar directamente el objeto UIStoryboardSegue pasado en prepareForSegue. Tiene una propiedad llamada destinationViewController que es el controlador de vista que se está instanciando. Encuentro eso mucho más limpio. Este es un ejemplo.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"AddPlayer"]) 
    { 
     PlayerDetailsViewController 
      *playerDetailsViewController = 
      (PlayerDetailsViewController *) segue.destinationViewController; 

     playerDetailsViewController.delegate = self; 
    } 
} 

IMO Creo que los guiones gráficos son geniales porque funcionan como un modelo de su aplicación. Además, nunca me han gustado las puntas. = D

+0

Oh, espera. La respuesta anterior hizo esto pero asignaron el controlador de vista de destino a un controlador de vista de navegación que no tiene que hacer (ni siquiera sé si eso funciona ...). –

Cuestiones relacionadas