2011-12-08 15 views
31

Tengo un problema con los datos de aprobación adecuados entre las vistas pero no de manera estándar.iOS storyboard pasando data navigationViewController

imagen que describe mi problema:

http://i.stack.imgur.com/0jHYC.png

I performSegueWithIdentifier con uno de los dos identificadores segue y luego en Quiero pasar datos a ViewController llamado "Firmy" o "Oddzialy" .

Pasando código de datos:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"sLogowanieFirmy"]) { 
     FirmyVC *firmyVC = [segue destinationViewController]; 
     firmyVC.tabFirmy = self.tabFirmy; 
    } 
    if ([[segue identifier] isEqualToString:@"sLogowanieOddzialy"]) { 
     OddzialyVC *oddzialyVC = [segue destinationViewController]; 
     oddzialyVC.wybranaFirma = [self.tabFirmy objectAtIndex:0]; 
    } 
} 

El problema es que con el método [destinationViewController segue] becouse destinationViewController para segue es NavigationViewController.

Entonces, ¿cuál es la forma correcta de pasar datos y tener controladores de navegación independientes?

+0

Tal vez usted quiere echar un vistazo a la clase 'NSNotificationCenter'. http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsnotificationcenter_Class/Reference/Reference.html – Dimme

+0

¿No hay una manera más conveniente? –

Respuesta

58

UINavigationController tiene una propiedad llamada topViewController que devuelve el controlador de vista que se encuentra en la parte superior de la pila.

Así que su método prepareForSegue: puede ser algo como esto ...

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"sLogowanieFirmy"]) { 
     UINavigationController *nav = [segue destinationViewController]; 
     FirmyVC *firmyVC = (FirmyVC *)nav.topViewController; 
     firmyVC.tabFirmy = self.tabFirmy; 
    } 

    // etc... 
} 
+1

Esto es exactamente lo que estaba buscando. ¡Gracias! Me salvaste el tiempo –

3

Aquí está en rápida:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{  
    if (segue.identifier == "sLogowanieFirmy") { 
     let nav = segue.destinationViewController as! UINavigationController 
     let firmyVC = nav.topViewController as! FirmyVC 
     firmyVC.tabFirmy = self.tabFirmy    
    } 

    // etc... 
} 
Cuestiones relacionadas