100 votes

Swift par programme accédez à un autre point de vue/contrôleur de scène

Je suis en utilisant le code suivant de programmation pour accéder à un autre ViewController. Il fonctionne très bien, mais d'une façon ou masque l' navigation bar. Comment puis-je résoudre ce problème? (la barre de navigation est créé par embeding l' ViewController dans la navigation controller si ce qui compte.)

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("nextView") as NextViewController
self.presentViewController(nextViewController, animated:true, completion:nil)

240voto

jaiswal Rajan Points 1

Dans Swift 3

Avec un créé par programmation du Contrôleur

Si vous voulez naviguer sur le Contrôleur créée par programme, puis de le faire:

let newViewController = NewViewController()
self.navigationController?.pushViewController(newViewController, animated: true)

Avec un scénario créé Contrôleur

Si vous voulez naviguer sur le Contrôleur sur la table de montage avec l'Identificateur "newViewController", puis faire ceci:

let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "newViewController") as! NewViewController
        self.present(newViewController, animated: true, completion: nil)

42voto

zeeshan Points 512

SWIFT 4.x

Les Chaînes de caractères entre guillemets doubles toujours me confondre, donc, je pense que la réponse à cette question doit certains de présentation graphique pour le nettoyer.

Pour une application bancaire, j'ai un LoginViewController et un BalanceViewController. Chacun ont leurs écrans respectifs.

L'application démarre et affiche l'écran de Connexion. Lorsque la connexion est réussie, l'application ouvre l'Équilibre de l'écran.

Voici à quoi il ressemble:

enter image description here

enter image description here

La connexion succès est traitée comme ceci:

let storyBoard: UIStoryboard = UIStoryboard(name: "Balance", bundle: nil)
let balanceViewController = storyBoard.instantiateViewController(withIdentifier: "balance") as! BalanceViewController
self.present(balanceViewController, animated: true, completion: nil)

Comme vous pouvez le voir, le storyboard ID "équilibre" dans les petites lettres, c'est ce qui se passe dans la deuxième ligne du code, et c'est l'ID qui est défini dans la table de montage séquentiel paramètres, comme dans la capture d'écran jointe.

Le terme "Équilibre" avec le capital " B " est le nom du storyboard fichier, qui est utilisé dans la première ligne du code.

Nous savons que l'utilisation de Chaînes codées en dur dans le code est une très mauvaise pratique, mais de toute façon dans le développement d'iOS, il est devenu une pratique courante, et Xcode n'a même pas de les avertir d'eux.

21voto

ocanal Points 5576

Vous devez pousser les nouveaux viewcontroller par l'utilisation actuelle de la manette de navigation, n'est pas présent.

self.navigationController.pushViewController(nextViewController, animated: true)

14voto

LagMaster Points 51

Selon @jaiswal Rajan dans sa réponse. Vous pouvez faire un pushViewController comme ceci:

let storyBoard: UIStoryboard = UIStoryboard(name: "NewBotStoryboard", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "NewViewController") as! NewViewController
self.navigationController?.pushViewController(newViewController, animated: true)

6voto

Aks Points 1033

Donc, Si vous présenter une vue contrôleur ne s'affichera pas dans la manette de navigation. Il suffit de prendre complet de l'écran. Pour ce cas, vous devez créer une autre manette de navigation et d'ajouter votre nextViewController en tant que root pour cela et pour présenter cette nouvelle navigationController.

Une autre façon est de simplement pousser la-vue-contrôleur.

self.presentViewController(nextViewController, animated:true, completion:nil)

Pour plus d'informations, consultez la documentation d'Apple:- https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/doc/uid/TP40006926-CH3-SW96

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X