Avertissement :-la Présentation de la vue des contrôleurs détaché de la vue des contrôleurs est découragé
Dans mon application, j'utilise une manette de navigation. Plus tard, dans certains point de vue, je suis en utilisant presentViewController
pour montrer une image agrandie.
Aussi, je ne suis pas à l'aide d'une table de montage ou de plume.
J'obtiens cette erreur dans iOS 7 uniquement. Il fonctionne très bien sous iOS 6 et versions antérieures:
Présentant vue contrôleurs d'affichage séparé des contrôleurs est
découragé
- Je n'ai pas encore sorti. Mais dans mon application, je ne suis pas attribuer une viewcontroller à la fenêtre.rootviewcontroller. je suis l'ajout de vue à la fenêtre. Peut-être c'est la raison pour moi. mais pas sûr...
- La raison que vous avez mentionné ci-dessus pourrait ne pas en être la cause. Même moi, je suis confronté au même problème. Et dans notre projet, je suis à l'affectation d'une-vue-contrôleur à la fenêtre.rootviewcontroller .
- Je pense que les autres commentaires correctement se référer à quelque chose à propos de la rootViewController et la fenêtre de connexion. Je n'ai pas tout compris, mais j'ai pu contourner le problème en présentant le contrôleur directement sur la rootViewController au lieu de sur la manette de navigation ou l'un de ses enfants.
- Azaxis eu: stackoverflow.com/a/31877722/5306470
Vous devez vous connecter pour publier un commentaire.
Pour éviter l'avertissement dans une poussée de navigation, vous pouvez utiliser directement :
Et puis dans votre modal-vue-contrôleur, quand tout est terminé, vous pouvez les appeler :
[self dismissViewControllerAnimated:YES completion:nil];
self.navigationController
a fait pour moi.La raison de cet avertissement, je présente une vue contrôleur sur une petite vue qui n'est pas de taille plein la vue. Étant donné ci-dessous est l'image de mon projet. où sur cliquez sur les quatre options ci-dessus. L'utilisateur de naviguer à travers les différents childviewcontroller de vue.(il fonctionne comme tabViewcontroller). Mais le childviewcontroller contient de vue de petite taille. Donc, si nous présentons une vue de childviewcontroller il donne cet avertissement.
Et pour éviter cela, vous pouvez présenter une vue sur childviewcontroller parent
Attendre
viewDidAppear()
:Cette erreur peut également se produire si vous essayez de présenter-vue-contrôleur avant l'affichage fait apparaître, par exemple la présentation de la vue dans
viewWillAppear()
ou plus tôt.Essayez de présenter un autre point de vue après
viewDidAppear()
ou à l'intérieur d'elle.viewDidLoad()
, les gens! J'ai fait cette erreur tellement de fois...Dans mon cas, j'ai un
sampleViewController
s'ajouté comme une sous-vue, puis tente de présenter une liste à partir de la vue desampleViewController
(iciself
au lieu d'unUIViewController
exemple):Le droit chemin doit être inférieure à:
B. t.w., ceci fonctionne également pour les cas qui présentent une liste de former un tableview cellule, vous avez juste besoin de s'assurer de la tableview contrôleur a été ajouté comme enfant-vue-contrôleur ainsi.
[self addChildViewController:sampleViewController];
, maintenant, j'ai ajouté ce, je vous remercieJe pense que le problème, c'est que vous n'avez pas une bonne vue contrôleur de la hiérarchie. Définir la rootviewcontroller de l'application et de montrer ensuite de nouveaux points de vue en les poussant ou en présentant les nouveaux contrôleurs de vue sur eux. Laissez chaque vue contrôleur de gestion de leur point de vue. Seul conteneur de vue des contrôleurs, comme le tabbarviewcontroller, ne devrait jamais ajouter un autre point de vue, les contrôleurs de vues de leurs propres points de vue. Lire le point de vue des contrôleurs guide de programmation pour en savoir plus sur la façon d'utiliser la vue des contrôleurs correctement. https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/
J'ai presque le même problème. La raison en est que j'ai essayé de présenter "quelques" contrôleur sur l'autre, et après l'animation a été terminé, j'ai été paramètre présenté contrôleur en tant que root. Après cette opération, tous les autres contrôleurs de la présentation de me ramener à l'avertissement: "Présentant vue contrôleurs d'affichage séparé des contrôleurs est découragé". Et je résoudre cet avertissement juste les paramètres de "certains" contrôleur en tant que root sans aucune présentation à la commencer.
Supprimée:
Juste faire en tant que root sans aucune présentation:
L'une des solution pour cela est si vous avez childviewcontroller de Sorte que vous simplement presentviewcontroller sur son parent par l'
Et pour rejeter l'utilisation de la même dismissview contrôleur.
Ce qui est une solution qui fonctionne pour moi.
Swift 3
Pour quelqu'un d'achoppement sur ce, voici la réponse rapide.
Utilisation
[self.navigationController presentViewController:xxx animated:YES completion:nil]
dans iOS 8.Essayer ce code
vous avez besoin pour ajouter la-vue-contrôleur qui présentera le nouveau contrôleur comme un enfant du parent-vue-contrôleur.
Disons que vous avez yourMainViewController, puis vous ajoutez un nouveau contrôleur appelé controllerA, puis vous souhaitez présenter un nouveau contrôleur appelé controllerB de controllerA
vous devez écrire quelque chose comme ceci:
et dans controllerA vous pouvez présenter le nouveau contrôleur sans avertissements
Essayer de présenter sur
TabBarController
si c'est unTabBarController
application basée sur .Raison pourrait être
self
est enfant deTabBarController
et que vous essayez de présenter à partir d'unChildViewController
.Oui, j'ai aussi connu le même message d'avertissement lors de l'affichage d'une Alerte contrôleur qui était dans un autre point de vue. Plus tard, j'ai évité ce problème en présentant l'alerte contrôleur de la vue parent contrôleur comme ci-dessous:
Assurez-vous d'avoir une vue de la racine de contrôleur pour commencer. Vous pouvez le définir dans
didFinishLaunchingWithOptions
.Beaucoup de raisons de cet avertissement. Le mien est parce que j'ai un segue connecté depuis un ViewController à un autre qui sera présenté sous forme modale. Mais, le ViewController je suis présente de est généré dynamiquement par un PageViewController. C'est pourquoi il est détaché dans le Storyboard. Mon application ne va pas planter à cause de ça; mais je voudrais le silence de l'avertissement.
Cela dépend si vous voulez montrer votre alerte ou quelque chose de similaire dans n'importe quel endroit de sorte UIViewController.
Vous pouvez utiliser cet exemple de code:
Dans Swift 4.1 et Xcode 9.4.1
La solution est
S'écrire comme cela, je suis la même erreur
J'obtiens le même message d'erreur
Solution complète est