web-dev-qa-db-fra.com

Comment naviguer d'un contrôleur de vue à un autre à l'aide de Swift

J'aimerais naviguer d'un contrôleur de vue à un autre. Comment puis-je convertir le code Objective-C suivant en Swift?

UIViewController *viewController = [[self storyboard] instantiateViewControllerWithIdentifier:@"Identifier"];
UINavigationController *navi = [[UINavigationController alloc] initWithRootViewController:viewController];
[self.navigationController pushViewController:navi animated:YES];
72
sathish

Créez un fichier Swift (SecondViewController.Swift) pour le second contrôleur de vue Et dans la fonction appropriée, tapez ceci:

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


Swift 2+

let mapViewControllerObj = self.storyboard?.instantiateViewControllerWithIdentifier("MapViewControllerIdentifier") as? MapViewController
self.navigationController?.pushViewController(mapViewControllerObj!, animated: true)

Swift 4

let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "IKDetailVC") as? IKDetailVC
self.navigationController?.pushViewController(vc!, animated: true)
173

Dans mon expérience, navigationController était nul alors j'ai changé mon code pour ceci:

let next = self.storyboard?.instantiateViewControllerWithIdentifier("DashboardController") as! DashboardController
self.presentViewController(next, animated: true, completion: nil)

N'oubliez pas de définir ViewController StoryBoard Id dans StoryBoard -> identity inspector

32
Mojtabye

Swift 3.01

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "Conversation_VC") as! Conversation_VC
self.navigationController?.pushViewController(secondViewController, animated: true)
15
Maksim Kniazev

Si vous ne souhaitez pas que le bouton Précédent apparaisse (ce qui était mon cas, car je souhaitais le présenter après la connexion d'un utilisateur), voici comment définir la racine du contrôleur de navigation:

let vc = self.storyboard?.instantiateViewControllerWithIdentifier("YourViewController") as! YourViewController
        let navigationController = UINavigationController(rootViewController: vc)
        self.presentViewController(navigationController, animated: true, completion: nil)
15
Keith Holliday

Dans Swift 4.0

var viewController: UIViewController? = storyboard().instantiateViewController(withIdentifier: "Identifier")
var navi = UINavigationController(rootViewController: viewController!)
navigationController?.pushViewController(navi, animated: true)
6
Rahul Fate

Swift 3  

let secondviewController:UIViewController =  self.storyboard?.instantiateViewController(withIdentifier: "StoryboardIdOfsecondviewController") as? SecondViewController

self.navigationController?.pushViewController(secondviewController, animated: true)
2
SAURAV JUSTIN
let objViewController = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController
self.navigationController?.pushViewController(objViewController, animated: true)
1
Davender Verma

Dans Swift 4.1 et Xcode 10

Ici AddFileViewController est le deuxième contrôleur de vue.

Storyboard id est AFVC

let next = self.storyboard?.instantiateViewController(withIdentifier: "AFVC") as! AddFileViewController
self.present(next, animated: true, completion: nil)

//OR

//If your VC is DashboardViewController
let dashboard = self.storyboard?.instantiateViewController(withIdentifier: "DBVC") as! DashboardViewController
self.navigationController?.pushViewController(dashboard, animated: true)

Si nécessaire, utilisez thread.

Ex: 

DispatchQueue.main.async { 
    let next = self.storyboard?.instantiateViewController(withIdentifier: "AFVC") as! AddFileViewController
    self.present(next, animated: true, completion: nil) 
}

Si vous voulez bouger après un certain temps.

EX: 

//To call or execute function after some time(After 5 sec)
DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
    let next = self.storyboard?.instantiateViewController(withIdentifier: "AFVC") as! AddFileViewController
    self.present(next, animated: true, completion: nil) 
} 
1
iOS

Dans Swift 3

let nextVC = self.storyboard?.instantiateViewController(withIdentifier: "NextViewController") as! NextViewController        
self.navigationController?.pushViewController(nextVC, animated: true)
1
Zeeshan

Swift 5

Utilisez Segue pour naviguer d’un contrôleur de vue à un autre:

performSegue(withIdentifier: "idView", sender: self)

Cela fonctionne sur Xcode 10.2.

0
Jerry Chong

Swift 4

Vous pouvez changer d’écran en appuyant sur le contrôleur de navigation, vous devez d’abord régler le contrôleur de navigation avec UIViewController  

let vc = self.storyboard?.instantiateViewController(withIdentifier: "YourStoryboardID") as! swiftClassName

self.navigationController?.pushViewController(vc, animated: true)
0
Azharhussain Shaikh

Xamarin (C #)

NavigationController.PushViewController(new HomePage(), true);

Passez le ViewController de destination.

Rapide 

navigationController?.pushViewController(HomePage(), animated: true);
0
Shanu Singh