¿Cómo puedo cargar el guión gráfico programáticamente de la clase?

Mi problema es que estaba buscando la forma de usar tanto el guión gráfico como el xib . Pero no puedo encontrar la forma adecuada de cargar y mostrar el guión gráfico mediante progtwigción. El proyecto se comenzó a desarrollar con xib, y ahora es muy difícil anidar todos los archivos xib en el guión gráfico. Así que estaba buscando la manera de hacerlo en código, como con alloc, init, push para viewControllers. En mi caso, tengo solo un controlador en el guión gráfico: UITableViewController , que tiene celdas estáticas con algún contenido que quiero mostrar. Si alguien conoce la forma adecuada de trabajar tanto con xib como con el guión gráfico sin una gran refactorización, agradeceré cualquier ayuda.

En su guión gráfico vaya al inspector de atributos y configure el identificador del controlador de vista. A continuación, puede presentar ese controlador de vista utilizando el siguiente código.

 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"myViewController"]; vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentViewController:vc animated:YES completion:NULL]; 

Swift 3

 let storyboard = UIStoryboard(name: "Main", bundle: nil) let vc = storyboard.instantiateViewController(withIdentifier: "viewController") self.navigationController!.pushViewController(vc, animated: true) 

Swift 2

 let storyboard = UIStoryboard(name: "Main", bundle: nil) let vc = storyboard.instantiateViewControllerWithIdentifier("viewController") self.navigationController!.pushViewController(vc, animated: true) 

Requisito previo

Asigna una ID de Storyboard a tu controlador de vista.

Storyboard ID

IB> Mostrar el inspector de identidad> Identidad> ID del guión gráfico

Swift (legado)

 let storyboard = UIStoryboard(name: "Main", bundle: nil) let vc = storyboard.instantiateViewControllerWithIdentifier("viewController") as? UIViewController self.navigationController!.pushViewController(vc!, animated: true) 

Editar: Swift 2 sugerido en un comentario de Fred A.

En el inspector de atributos proporcione el identificador para ese controlador de vista y el siguiente código funciona para mí

 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; DetailViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; [self.navigationController pushViewController:detailViewController animated:YES]; 

Prueba esto

 UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"Login"]; [[UIApplication sharedApplication].keyWindow setRootViewController:vc]; 

en rápido
NavigationController y pushController que puede reemplazar por

 present(vc, animated:true , completion: nil) 

Para swift 3 y 4 , puedes hacer esto. La buena práctica es establecer el nombre de Storyboard igual a StoryboardID.

 enum StoryBoardName{ case second = "SecondViewController" } extension UIStoryBoard{ class func load(_ storyboard: StoryBoardName) -> UIViewController{ return UIStoryboard(name: storyboard.rawValue, bundle: nil).instantiateViewController(withIdentifier: storyboard.rawValue) } } 

y luego puedes cargar tu Storyboard en tu ViewController de la siguiente manera:

 class MyViewController: UIViewController{ override func viewDidLoad() { super.viewDidLoad() guard let vc = UIStoryboard.load(.second) as? SecondViewController else {return} self.present(vc, animated: true, completion: nil) } 

}

Cuando creas un Storyboard nuevo, simplemente establece el mismo nombre en StoryboardID y agrega el nombre Storyboard en tu enumeración ” StoryBoardName “.

Siempre puede saltar directamente al controlador raíz:

 UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UIViewController *vc = [storyboard instantiateInitialViewController]; vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentViewController:vc animated:YES completion:NULL];