apple ios objective-c cocoa-touch storyboard navigationcontroller

ios - apple - navigation controller swift 4



Guión gráfico de iOS que pasa datos de navegaciónViewController (2)

Tengo problemas con el paso correcto de los datos entre vistas pero no de forma estándar.

Imagen que describe mi problema:

Realizo SegueWithIdentifier con uno de los dos identificadores de segue y luego quiero pasar datos a ViewController llamado "Firmy" o "Oddzialy".

Paso de 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 está con el método [segue destinationViewController] porque el destinationViewController para segue es NavigationViewController.

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


Aquí está en rápido:

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... }


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

Entonces tu método prepareForSegue: puede verse 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... }