Mon code fonctionne, mais j'essaie de le comprendre. C'est un peu de code utilisé pour gérer un bouton "Annuler" qui peut renvoyer soit d'une séquence "Show" (présentée lorsque l'utilisateur clique sur une cellule de vue table pour l'éditer) ou d'une séquence "Present Modally" (lorsque l'utilisateur clique sur " + "élément de bouton de barre pour ajouter une nouvelle cellule à la vue de table). Diagramme ci-dessous. Je suis confus par UINavigationController et la propriété navigationController. Excuses si je manque quelque chose de très évident.Difficulté rapide à comprendre UINavigationController & navigationController re: presentingController
// Apple says below is nil if neither the current view controller nor any of its ancestors were presented modally
let isPresentingInAddMode = presentingViewController is UINavigationController
if isPresentingInAddMode {
// Modal segues need to be dismissed
dismiss(animated: true, completion: nil)
} else {
// But Show segues are "popped" off of a stack of controllers.
navigationController!.popViewController(animated: true)
}
's Ici ce j'am pas understanding: - Si je've arrived au Detail View Controller via un "Show" segue, pause pendant execution et option-click sur navigationController, Xcode says que ce's un UINavigationController ? Et si je fais une pause dans l'exécution de la condition &, utilisez le débogueur pour: po navigationController! == nil - Xcode dit que cela est faux, donc navigationController est un UINavigationController valide.
Alors, pourquoi ne pas
presentingViewController is UINavigationController
assimilent à true dans la plus haute déclaration quand je l'ai présenté à l'aide d'un « Show »?
Peut-être que je ne comprends pas "présent". Est-ce que la présentation de quelque chose qui se passe seulement avec des segmen modaux, donc il n'y a pas de PresentViewController? Et si je repense à mon storyboard (voir schéma ci-dessous), l'un des ancêtres du contrôleur de vue de détail est un contrôleur de vue de table doté d'un contrôleur de navigation intégré à la commande presentationViewController d'Apple: presentingViewController is UINavigationController Soyez aussi dans cette situation?
Et cela:
presentingViewController != nil
obtenir le même résultat ou est-il une raison importante de vérifier l'presentingViewController est un UINavigationController?
Merci beaucoup pour toute personne assez aimable pour m'aider à analyser cela. John
Le Segue "ShowDetail" est un "Show" Segue provenant de la vue de la table cellulaire. La section "AddItem" est de type "Present Modally" et provient de l'élément de bouton "+".
Il est probablement pas nécessaire de voir le préparer pour le code de Segue dans le contrôleur de vue de la table, mais si vous êtes curieux:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
if segue.identifier == "ShowDetail" { // is this the "ShowDetail" segue? and if it is...
// ... get the IndexPath for the row the user clicked on (the selected row)
let indexPath = tableView.indexPathForSelectedRow!
let destinationViewController = segue.destination as! DetailViewController // downcast the destination as the specific class DetailViewController
// Get the to do item that the user clicked on
let selectedToDo = toDoArray[indexPath.row]
// Pass selectedToDo to the toDoItem variable in our destinationViewController
destinationViewController.toDoItem = selectedToDo
}
}
s'il vous plaît ajouter du code où vous appelez les ViewControllers – muescha
mettre des extraits de code de tir entre deux de ce char: '(backtick) – muescha
Salut - il ya un spectacle Voir -" ShowDetail "est son identifiant. "AddItem" est appelé à partir de l'élément "+" du bouton de barre d'addition, tandis que "ShowDetail" est appelé depuis la cellule de vue de table. Je vais ajouter le "préparer (pour segue :) code pour le contrôleur de vue de la table ci-dessus, mais il ne devrait pas importer re: comprendre le UINavigationController vs navigationController, devrait-il? Thx – Gallaugher