Je veux obtenir le rootViewController de UINavigationController, Cela fonctionne dans Objective-c, mais quand je l'utilise dans Swift, l'erreur me rappelle que c'était faux enter image description here. Si je fais cela, ajoutez "as! NSArray", cela fonctionne, mais cela me rappelle aussi que "cast from '[UIViewController]' au type non lié 'NSArray' échoue toujours". Est-ce que quelqu'un peut montrer un meilleur moyen d'obtenir le rootViewController sans erreur ou rappelle-t-il? Je vous remercie.Comment puis-je obtenir le rootViewController de UINavigationController dans Swift
Répondre
Vous pouvez obtenir la racine par,
self.navigationController!.viewControllers.first
remplacer
let homevci = controllerArray.objectAtIndex(0) as? NBHomeVC
avec
let homevci = controllerArray.first as? NBHomeVC
ou
let homevci = controllerArray[0] as? NBHomeVC
Ou comme une extension:
extension UINavigationController {
var rootViewController : UIViewController? {
return viewControllers.first
}
}
Et vous l'utilisez comme ceci:
if let rootv = navigationController?.rootViewController { }
Belle réponse, mais «comme? UIViewController' peut être supprimé car 'first' renvoie déjà' UIViewController? '. En outre, dans votre second extrait de code, il devrait être 'navigationController? .rootViewController' car c'est un optionnel. – nyg
@nyg: Merci de l'avoir remarqué, je suis sûr que cela a fonctionné à un moment donné dans le passé, mais trop de versions de Swift allaient et venaient ... Cela devrait fonctionner maintenant dans Swift 4. –
Ou peut-être cela peut être utilisé
self.navigationController.visibleViewController
ou
self.navigationController.topViewController
c'est 'laissez homevci = navigationController! .viewControllers! .premier comme! NBHomeVC' –
mais mieux, vous avez besoin de lire une documentation rapide. ce n'est pas objc-c :) –
http://stackoverflow.com/questions/26667009/get-top-most-uiviewcontroller – Scriptable