126 votes

Démission d'un contrôleur de vue présenté

J'ai une question théorique. Je suis en train de lire l'article d'Apple ViewController guide.

Ils ont écrit :

Lorsqu'il s'agit de licencier un contrôleur de vue présenté, la fonction l'approche préférée est de laisser le contrôleur de vue présentateur le congédier le renvoyer. En d'autres termes, dans la mesure du possible, le contrôleur de vue qui a présenté le contrôleur de vue doit également prendre la responsabilité de l'exécution de la tâche. qui a présenté le contrôleur de vues doit également prendre la responsabilité de l'écarter. Bien qu'il existe plusieurs techniques pour notifier au contrôleur de vue qui le présente que le contrôleur de vue qu'il a présenté présenté, la technique préférée est la délégation.

Mais je ne peux pas expliquer, pourquoi je dois créer un protocole dans le VC présenté et ajouter une variable de délégué, créer une méthode de délégué dans le VC présenté pour renvoyer le VC présenté, au lieu d'un simple appel dans a présenté méthode du contrôleur de vue

[self dismissViewControllerAnimated:NO completion:nil] ?

Pourquoi le premier choix est-il meilleur ? Pourquoi Apple le recommande-t-elle ?

1voto

mbi Points 143

J'aime bien celui-là :

        (viewController.navigationController?.presentingViewController
            ?? viewController.presentingViewController
            ?? viewController).dismiss(animated: true)

0voto

ErasmoOliveira Points 1353

Si vous utilisez une modale, utilisez la fonction "view dismiss".

[self dismissViewControllerAnimated:NO completion:nil];

0voto

RegularExpression Points 1255

C'est un tas de conneries. La délégation est bien quand elle est nécessaire, mais si elle rend le code plus complexe - et c'est le cas - alors il doit y avoir une raison pour cela.

Je suis sûr qu'Apple a ses raisons. Mais il est plus clair et plus concis de demander simplement au VC présenté de faire le renvoi, à moins qu'il n'y ait une vraie raison de faire autrement et personne ici, à ce jour, n'en a présenté une que je puisse voir.

Les protocoles sont excellents lorsqu'ils sont nécessaires, mais la conception orientée objet n'a jamais consisté à faire communiquer inutilement les modules entre eux.

Tom Love (co-développeur d'Objective C) a un jour déclaré qu'Objective C était "élégant", "petit", "net" et "bien défini" (en comparaison avec C++). Facile à dire pour lui. La délégation est une fonctionnalité utile qui semble avoir été sur-utilisée "juste parce que", et bien que j'aime travailler dans ce langage, je redoute l'idée de me sentir obligé d'utiliser une syntaxe inutile pour rendre les choses plus complexes qu'elles ne doivent l'être.

0voto

halakala Points 443

En se concentrant uniquement sur le titre de la question, c'est la bonne réponse.

        presentedViewController?.dismiss(animated: true)

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