web-dev-qa-db-fra.com

Présenter le storyController d'un autre ViewController

J'ai plusieurs UIViewControllers dans le Storyboard de mon application iOS. Je souhaite ouvrir l'un des UIViewControllers (dans le storyboard) à partir d'un autre UIViewController.

J'ai essayé le code ci-dessous, mais il ne fonctionne pas même si je l'avais utilisé avant iOS 5 et cela fonctionnait bien.

- (IBAction)addNotes:(id)sender {
    NotesViewController *notesView = [[NotesViewController alloc] initWithNibName:@"NotesViewController" bundle:nil];
    [self presentModalViewController:notesView animated:YES];
}

Comment puis-je effectuer cette action avec iOS 5 Storyboards?

17
Ranjit

En supposant que vous ayez un storyboard, allez dans le storyboard et donnez à votre VC un identifiant (inspecteur), puis faites:

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

En supposant que vous souhaitiez créer un fichier xib:

UIViewController *vc = [[UIViewController alloc] initWithNibName:@"NIBNAME" bundle:nil];
[self.navigationController pushViewController:vc animated:YES];

Sans fichier xib:

UIViewController *vc = [[UIViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];
52
DAS

La suite fonctionnera sur Swift 3.0 et au-dessus.

StoryBoard

let storyBoard = UIStoryboard(name: "Main", bundle: nil)
let mainViewController = storyBoard.instantiateViewController(withIdentifier: "Identifier")
self.navigationController?.pushViewController(mainViewController, animated: true)

.xib

    let viewController = UIViewController(nibName: "NibName", bundle: nil)
    self.navigationController?.pushViewController(viewController, animated: true)

Sans .xib

let viewController = UIViewController()
self.navigationController?.pushViewController(viewController, animated: true)
6
Vakas

Mise à jour avec la version 3.1 de Swift

si vous n'avez pas embarquez le contrôleur de navigation alors

let storyBoard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let viewController2 = storyBoard.instantiateViewController(withIdentifier: "ViewController2")
self.present(viewController2, animated: true, completion: nil)

et, si vous aviez embarquez le contrôleur de navigation alors

let storyBoard:UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let viewController2 = storyBoard.instantiateViewController(withIdentifier: "ViewController2")
self.navigationController?.pushViewController(viewController2, animated: true)
1
Tuan Huynh
UIViewController *initialHelpView = [[UIStoryboard storyboardWithName:@"StoryBoard_IDentifier" bundle:nil] instantiateViewControllerWithIdentifier:@"ViewController_Identifier"];
[self presentViewController:initialHelpView animated:YES completion:nil];
1

Dans Swift 4.2, répondez à ceux qui veulent cette réponse sans navigation dans les versions modales et mises à jour de Swift.

let storyboard = UIStoryboard(name: "YourStoryboardName", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "mainViewController")
self.present(controller, animated: true, completion: nil)
0
Shahzaib Maqbool