2012-01-24 9 views
22

Antes de guiones gráficos, pude establecer delegados y orígenes de datos simplemente arrastrando una salida a una clase. Con guiones gráficos, no puedo arrastrar la salida a otro controlador de visualización; no hay un destino que responda a eso.Tablero de guiones: configuración de delegados

Si hago clic en un objeto de controlador de vista, puedo ver al propietario de la clase en la parte inferior, pero tan pronto como selecciono el otro controlador de vista que contiene la salida, la selección anterior se ha ido, por lo que no puedo conectar el dos.

¿Es esta la forma en que Apple dice que solo debemos conectarlos mediante programación?

Respuesta

27

Correcto. Establezca el delegado u otros datos en su método prepareForSegue:sender:. Aquí está un ejemplo:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Check the segue identifier 
    if ([segue.identifier isEqualToString:@"showDetail"]) 
    { 
     // Get a reference to your custom view controller 
     CustomViewController *customViewController = segue.destinationViewController; 

     // Set your custom view controller's delegate 
     customViewController.delegate = self; 
    } 
} 
+3

Cómo acerca de la configuración del delegado para un UISplitViewController? El código de ejemplo que estoy mirando lo maneja al llegar al controlador de vista raíz de la ventana de la siguiente manera: 'UISplitViewController * splitViewController = (UISplitViewController *) self.window.rootViewController;' Aunque técnicamente correcto, y funciona, parece una realidad enfoque sucio en comparación con la forma agradable en que los delegados y los controladores de vista se configuraron antes de los guiones gráficos ... –

0

Si su destino segue guión gráfico Vista Controlador es un UIViewController continuación @Marco respuesta es correcta. Pero si su destino es un controlador de vista UINavigationViewController entonces usted tiene que conseguir el UIViewController de UINavigationViewController:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Check the segue identifier 
    if ([segue.identifier isEqualToString:@"chooseCategoryType"]) 
    { 
     // Get a reference of your custom view controller if your segue connection is an UIViewController 
     // CustomViewController *customViewController = segue.destinationViewController; 
     // Get a reference of your custom view controller from navigation view controller if your segue connection is an UINavigationViewController 
     CustomViewController *customViewController = [[[segue destinationViewController] viewControllers] objectAtIndex:0]; 

     // Set your custom view controller's delegate 
     customViewController.delegate = self; 
    } 
}