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