Mon problème est que je cherchais un moyen d'utiliser à la fois storyboard et xib. Mais je ne trouve pas le moyen approprié de charger et de montrer le storyboard par programmation. Le projet a été lancé avec xib et il est maintenant très difficile d'imbriquer tous les fichiers xib dans le storyboard. Je cherchais donc un moyen de le faire en code, comme avec alloc, init, Push
pour viewControllers. Dans mon cas, je n'ai qu'un seul contrôleur dans le storyboard: UITableViewController
, qui contient des cellules statiques avec du contenu que je souhaite afficher. Si quelqu'un connaît la bonne façon de travailler à la fois avec xib et storyboard sans refactoring énorme, j'apprécierai toute aide.
Dans votre scénario, accédez à l'inspecteur Attributs et définissez l'identificateur du contrôleur de vue. Vous pouvez ensuite présenter ce contrôleur de vue à l'aide du code suivant.
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:vc animated:YES completion:NULL];
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "viewController")
self.navigationController!.pushViewController(vc, animated: true)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewController")
self.navigationController!.pushViewController(vc, animated: true)
Prérequis
Assignez un ID Storyboard à votre contrôleur de vue.
IB> Afficher l'inspecteur d'identité> Identité> ID de scénarimage
Swift (legs)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewController") as? UIViewController
self.navigationController!.pushViewController(vc!, animated: true)
Éditer: Swift 2 suggéré dans un commentaire par Fred A.
si vous voulez utiliser sans navigationController, vous devez utiliser les éléments suivants:
let Storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = Storyboard.instantiateViewController(withIdentifier: "viewController")
present(vc , animated: true , completion: nil)
Dans attribut attribut, donnez l'identifiant pour ce contrôleur de vue et le code ci-dessous fonctionne pour moi
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
DetailViewController *detailViewController = [storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
[self.navigationController pushViewController:detailViewController animated:YES];
Essaye ça
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"Login"];
[[UIApplication sharedApplication].keyWindow setRootViewController:vc];
à Swift
NavigationController et pushController vous pouvez remplacer pour
present(vc, animated:true , completion: nil)
Pour Swift 3 et 4, vous pouvez le faire. La bonne pratique consiste à donner à Storyboard le nom correspondant à 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)
}
}
et ensuite vous pouvez charger votre Storyboard dans votre ViewController comme ceci:
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)
}
}
Lorsque vous créez un nouveau storyboard, définissez simplement le même nom sur StoryboardID et ajoutez le nom du storyboard dans votre enum "StoryBoardName"
Vous pouvez toujours aller directement au contrôleur racine:
UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [storyboard instantiateInitialViewController];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:vc animated:YES completion:NULL];