ios - plus - como poner porcentaje de bateria en iphone 6
¿Cómo puedo cargar el guión gráfico programáticamente de la clase? (7)
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 programació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.
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.
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];
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];
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 ".
Prueba esto
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"Login"];
[[UIApplication sharedApplication].keyWindow setRootViewController:vc];
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];
en rápido
NavigationController y pushController que puede reemplazar por
present(vc, animated:true , completion: nil)