present open create change ios uiviewcontroller uinavigationcontroller swift uistoryboard

ios - open - Controlador de vista actual en Storyboard con un controlador de navegación-Swift



push view controller swift 4 (3)

Actualmente estoy mostrando viewController en mi nuevo guión gráfico a continuación:

var storyboard : UIStoryboard = UIStoryboard(name: AccountStoryboard, bundle: nil) var vc : WelcomeViewController = storyboard.instantiateViewControllerWithIdentifier("WelcomeID") as WelcomeViewController vc.teststring = "hello" self.presentViewController(vc, animated: true, completion: nil)

Sin embargo, esto presenta viewcontroller sin su controlador de navegación integrado. Traté de cambiar "WelcomeID" al controlador de navegación dentro del guión gráfico, pero sin éxito.

Lo hice trabajando en Objective -C, pero no sé cómo transformarlo en veloz:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"SetupStoryboard" bundle:nil]; UINavigationController *navigationController1 = [storyboard instantiateInitialViewController]; navigationController1.modalPresentationStyle = UIModalPresentationFormSheet; navigationController1.modalTransitionStyle = UIModalTransitionStyleCoverVertical; WelcomeViewController *vc = (WelcomeViewController *)navigationController1.viewControllers[0]; vc.teststring = @"Hello"; [self presentViewController:navigationController1 animated:YES completion:nil];

¿Cómo puedes hacer esto rápido?


let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("WelcomeID") as SecondViewController self.navigationController?.pushViewController(secondViewController, animated: true)

Nombre de clase es: SecondCiewController


Definitivamente estás en el camino correcto. Lamentablemente, cuando hace referencia a un controlador de vista por su ID de guión gráfico, ignorará el hecho de que está incrustado en cualquier cosa. Lo mismo ocurre con los segmentos cuando segue a algo incrustado, el controlador de vista de destino será el controlador de incrustación, no el controlador en el que normalmente está interesado. De todos modos, debería ser capaz de solucionar el problema de forma similar a como lo hizo en Objective-C, por lo que este es solo un ejercicio de conversión de sintaxis.

Editar: define el nombre del guión gráfico con una cadena ahora

let storyboard : UIStoryboard = UIStoryboard(name: "AccountStoryboard", bundle: nil) let vc : WelcomeViewController = storyboard.instantiateViewControllerWithIdentifier("WelcomeID") as WelcomeViewController vc.teststring = "hello" let navigationController = UINavigationController(rootViewController: vc) self.presentViewController(navigationController, animated: true, completion: nil)

O bien, puede darle a su controlador de vista de inserción una ID y crear una instancia en su lugar.


La respuesta dada por @Chris funciona bien en la versión anterior de swift.

Actualice Swift 3 y Swift 4

let storyboard : UIStoryboard = UIStoryboard(name: "AccountStoryboard", bundle: nil) let vc : WelcomeViewController = storyboard.instantiateViewController(withIdentifier: "WelcomeID") as! WelcomeViewController vc.teststring = "hello" let navigationController = UINavigationController(rootViewController: vc) self.present(navigationController, animated: true, completion: nil)

¡¡¡Gracias!!!