example bar ios objective-c uinavigationcontroller segue

ios - bar - Establecer una propiedad en una transición con el Controlador de navegación que contiene otra vista



set root view controller programmatically swift (4)

Dado que el controlador de vista de destino es realmente el controlador de navegación, intente acceder a la vista raíz de la siguiente manera:

UINavigationController *navController = [segue destinationViewController]; ShowItemsTableViewController *SITViewController = (ShowItemsTableViewController *)([navController viewControllers][0]); [SITViewController setItems:[self itemsFromCoreData]];

Me da un accidente cuando intento establecer una propiedad en mi transición. Es una UIView que pasa una propiedad a un Controlador de navegación que tiene una Vista de tabla como vista de raíz. Se supone que debe ir a mi TableViewController, pero parece que es interceptado por ese NavigationController y arroja un error de selector no reconocido.

Segue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"showItems"]) { ShowItemsTableViewController *destinationViewController = [segue destinationViewController]; [destinationViewController setItems:[self itemsFromCoreData]]; } }

Error:

-[UINavigationController setItems:]: unrecognized selector sent to instance 0x10920c840

¿Que está pasando aqui? Ese NavigationController no tiene una clase asociada, está solo en el guión gráfico y aparece de manera modal. Funciona si configuro el segue en el guión gráfico para ir directamente a la vista, no al NavigationController, pero realmente necesito el navegador allí. ¿Cómo puedo evitar esto?


Mire la clase de controlador de vista en la preparación para segue - es el controlador de navegación. Equípelo en esa clase, luego puedes obtener la vista deseada pidiéndole su controlador de vista superior.


Obtenga el controlViewController superior desde el UINavigationController:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"showItems"]) { UINavigationController *navigationController = segue.destinationViewController; ShowItemsTableViewController *showItemsTVC = (ShowItemsTableViewController * )navigationController.topViewController; showItemsTVC.items = [self itemsFromCoreData]; } }


Para Swift:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "segueShowNavigation" { var DestViewController = segue.destinationViewController as! UINavigationController let targetController = DestViewController.topViewController as! ReceiveViewController } }