J'essaie de rejeter un ViewController rapidement en appelant dismissViewController
unIBAction
@IBAction func cancel(sender: AnyObject) {
self.dismissViewControllerAnimated(false, completion: nil)
println("cancel")
}
@IBAction func done(sender: AnyObject) {
self.dismissViewControllerAnimated(false, completion: nil)
println("done")
}
Je pouvais voir le message println dans la sortie de la console mais ViewController n'est jamais rejeté. Quel pourrait être le problème?
ios
swift
viewcontroller
rshankar
la source
la source
Réponses:
De votre image, il semble que vous ayez présenté le ViewController à l'aide de push
Le
dismissViewControllerAnimated
est utilisé pour fermer les ViewControllers présentés à l'aide de modalSwift 2
Swift 4
la source
J'ai une solution à votre problème. Veuillez essayer ce code pour fermer le contrôleur de vue si vous présentez la vue à l'aide de modal:
Swift 3:
OU
Si vous présentez la vue à l'aide d'une séquence "push"
la source
si vous faites cela, je suppose que vous n'obtiendrez peut-être pas de message println dans la console,
la source
Dans Swift 3.0 à 4.0, c'est aussi simple que de taper ceci dans votre fonction:
Ou si vous êtes dans un contrôleur de navigation, vous pouvez le "pop":
la source
ajoutez cette ligne entre crochets:
la source
Utilisation:
au lieu de:
la source
Si vous présentez un contrôleur sans contrôleur de navigation, vous pouvez appeler le code suivant à partir d'une méthode du contrôleur présenté.
Si votre ViewController est présenté de manière modale, la présentation facultative de ViewController ne sera pas nulle et le code sera exécuté.
la source
Sur la base de mon expérience, j'ajoute une méthode pour me rejeter en tant qu'extension de UIViewController:
Puis j'appelle cette méthode pour rejeter le contrôleur de vue dans n'importe quelle
UIViewController
sous-classe. Par exemple, dans l'action d'annulation:la source
Depuis les documentations Apple :
Ainsi, c'est une mauvaise pratique de simplement invoquer la méthode de rejet de lui-même.
Ce que vous devez faire si vous le présentez modal, c'est:
la source
Ne créez aucun enchaînement depuis Annuler ou Terminé vers un autre VC et écrivez uniquement ce code avec vos boutons @IBAction
la source
Voici une façon de supprimer le contrôleur de vue actuel et de revenir au contrôleur de vue précédent. Vous pouvez le faire via Storyboard uniquement.
S'il vous plaît essayez ceci, ça fonctionne avec moi.
Deuxième voie - Utilisation -
navigationController.popViewControllerAnimated(true)
Bonne chance ..
la source
Pour référence, sachez que vous rejetez peut-être le mauvais contrôleur de vue. Par exemple, si vous avez une boîte d'alerte ou un modal affiché au-dessus d'un autre modal. (Vous pouvez avoir une alerte de publication Twitter s'affichant au-dessus de votre alerte modale actuelle, par exemple). Dans ce cas, vous devez appeler le renvoi deux fois ou utiliser une séquence de déroulement.
la source
Si vous présentez un ViewController de manière modale et que vous souhaitez revenir au ViewController racine, veillez à ignorer ce ViewController présenté de façon modale avant de revenir au ViewController racine sinon ce ViewController ne sera pas supprimé de la mémoire et entraînera des fuites de mémoire.
la source
Dans Swift 3.0
Si vous souhaitez supprimer un contrôleur de vue présenté
la source
Dans Swift 4.1 et Xcode 9.4.1
Si vous utilisez pushViewController pour présenter un nouveau contrôleur de vue, utilisez ceci
la source
Essaye ça:
la source
Étant donné que vous avez utilisé viewController présenté par push, vous pouvez donc utiliser
la source
Ce code écrit en action de bouton pour ignorer
la source
la source
Si vous utilisez la méthode actuelle dans le VC parent, vous devez appeler cette fonction, pour ignorer le VC enfant, utilisez cette
si vous appelez le VC enfant à l'aide de la méthode push, pour rejeter le VC enfant, utilisez ce
la source