La présentation d'un Modal-Vue-Contrôleur masque la Barre de Navigation
J'ai une navigation en fonction de l'application avec une barre de navigation, mais il existe quelques cas où, au lieu de pousser une-vue-contrôleur sur la pile, j'ai besoin de présenter le point de vue du contrôleur modal. Le problème est que lorsque je rejette le modèle-vue-contrôleur, tout fonctionne comme prévu, sauf que la barre de navigation est caché et l' (vue parent) a été redimensionné, qui est le comportement attendu, selon les docs. Alors j'ai pensé que je pourrait tout simplement appeler une méthode intégrée pour afficher la barre de navigation. J'ai déjà essayé
[self.navigationController setNavigationBarHidden:NO];
ainsi que la version animée, sans succès.
La documentation en parle dans la méthode
presentModalViewController: animated:
dans la section de discussion où il est dit,
Sur iPhone et iPod touch, le point de vue de modalViewController est toujours présenté en plein écran" et "Jeux de la modalViewController propriété à l'-vue-contrôleur. Redimensionne son point de vue et l'attache à la vue de la hiérarchie."Cependant, les docs n'ont pas la moindre idée de m'en comment annuler ce processus après avoir écarté une vue modal.
Quelqu'un d'autre a vécu cela et trouvé une solution?
Edit: je vais avoir ce même problème, donc au lieu de demander à ma propre question, je suis parrain d'une prime sur celui-ci. C'est ma situation spécifique:
Dans mon cas, je suis présente une Image Picker, un Modal-Vue-Contrôleur, sur une manette de Navigation:
-(void) chooseImage {
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
imagepicker = [[UIImagePickerController alloc] init];
imagepicker.allowsEditing = NO;
imagepicker.delegate = self;
imagepicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagepicker.navigationBar.opaque = true;
imagepicker.wantsFullScreenLayout = NO;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
if (self.view.window != nil) {
popoverController = [[UIPopoverController alloc] initWithContentViewController:imagepicker];
[popoverController presentPopoverFromBarButtonItem:reset permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
} else {}
} else {
[self.navigationController presentModalViewController:imagepicker animated:YES];
}
}
}
-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[self.popoverController dismissPopoverAnimated:true];
} else {
[self.navigationController dismissModalViewControllerAnimated:YES];
}
//Save the image
}
-(void) imagePickerControllerDidCancel:(UIImagePickerController *)picker {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[self.popoverController dismissPopoverAnimated:true];
} else {
[self.navigationController dismissModalViewControllerAnimated:YES];
}
}
Une remarque: j'ai ce même problème, donc au lieu de demander à ma propre question, je suis parrain d'une prime sur celui-ci.
OriginalL'auteur EmphaticArmPump | 2011-08-11
Vous devez vous connecter pour publier un commentaire.
Assurez-vous vous présenter ET de rejet de l'modalViewController de la UINavigationController, comme suit:
Si votre vue-contrôleur est en fait sur le UINavigationController de la pile, alors c'est la bonne façon de gérer la présentation et la révocation de l'modal-vue-contrôleur. Si votre UINavigationBar est toujours caché, il y a autre chose funky passe et nous aurions besoin de voir votre code afin de déterminer ce qui se passe.
Modifier
J'ai copié ton code dans une application de la mine et de la UIImagePickerController présenté avec succès et a rejeté et mon UINavigationController de UINavigationBar était toujours là. Je crois vraiment que le problème réside ailleurs, dans votre architecture. Si vous téléchargez un zip w/un exemple de projet je vais jeter un oeil.
viewWillAppear:
,viewDidAppear:
,viewWillDisappear:
etviewDidDisappear:
méthodes pour votre vue-contrôleur, votre manette de navigation, et votre modal-vue-contrôleur pour voir si l'un d'entre eux est la manipulation de l'INTERFACE utilisateur de façon imprévue.OriginalL'auteur Michael Frederick
Tout simplement essayer de code suivant, il travaillera
Un besoin de présenter la manette de navigation afin d'avoir la barre de navigation sur la présentation du contrôleur de
OriginalL'auteur Priyank Ranka
Je pense que j'ai vu ce comportement lors de la présentation d'une vue contrôleur sur le mauvais VC. Êtes-vous en faveur
presentModalViewController
sur la manette de navigation ou de la personne CR?Essayez de l'appeler à partir de la navigationController si vous ne l'êtes pas déjà.
Allait-à-dire à côté, mais Michael me battre pour elle: stackoverflow.com/a/11130090/287403
La barre de navigation en fait animer, ou tout simplement ne pas revenir quand il est couvert par le modal? Si vous êtes également de le rejeter correctement (à partir de la manette de navigation) et cela ne fonctionne toujours pas, poste un exemple sur github que l'on peut fixer.
Il n'a tout simplement pas de revenir quand couverts par le modal vue. J'ai ajouté du code pour cette réponse; il a juste besoin d'être approuvé par un mod (désolé pour les désagréments). Pour donner une idée du code, je suis fondamentalement d'appel Modal de la Vue qui contient une Image du Contrôleur de Sélecteur. Je l'appelle et le faire disparaître à l'aide de "l'auto.navigationController".
Si le code n'est pas privé, pensez à publier sur github afin que nous puissions réellement le déboguer. Va voir si j'ai le même problème avec un exemple de code.
OriginalL'auteur Bob Spryn
Si vous présentez un contrôleur modèle-Vue-contrôleur apparaît au total de vue.
Si vous souhaitez accéder à la manette de navigation propriétés dans la vue modèle, Vous devez créer une autre manette de navigation de référence et il continue comme précédente.
Cela peut être utile pour vous.
OriginalL'auteur Rajesh
Vérifier cela. C'est la Documentation d'Apple sous UIViewController Classe de Référence:
Il mentionne clairement qu'modal vue toujours présente en mode plein écran, il est donc évident que la barre de navigation sera caché. Mettez donc les séparer de la barre de navigation sur la modale de vue pour revenir en arrière.
Espère que cela vous aide à comprendre que les cacher de la vue avec manette de navigation est le comportement par défaut de modal de vue de façon à essayer de mettre une autre barre de navigation sur le mode de vue à naviguer.
Vous pouvez le vérifier plus loin sur ce lien
http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html
Mais pourquoi avez-vous besoin de cacher votre barre de navigation explicitement, lorsque vous présentez votre modal?
Je ne suis pas le masquage de la barre de navigation du tout, mais quand je rejette le modèle-vue-contrôleur, il n'est plus visible. J'ai juste envie de toujours être visible lorsque je rejette modes de vue.
OriginalL'auteur Parth Bhatt
de travail pour m'affiche la barre de navigation
OriginalL'auteur Asad ali
Emphatique et Devin –
Que j'ai commencé à lire par le biais d'Apple docs de se familiariser avec le problème, j'ai remarqué que la méthode que vous utilisez,
presentModalViewController:animated:
, semble être dépréciée en faveur depresentViewController:animated:completion:
. Peut-être que vous devriez essayer d'utiliser cette méthode à la place.Pour votre commodité, jetez un oeil par vous-même:
presentModalViewController:animation: référence
Je vais essayer de mettre ensemble un rapide programme de test pour voir si ce que j'ai dit ci-dessus est vrai. Mais donnez-lui un coup de feu – peut-être que ça vous aidera!
Je ne veux iOS 4.3 soutien. De toute façon, ça ne change rien; merci pour la suggestion!
Pas de problème. Dommage qu'il ne l'a pas aidé. @MichaelFrederick fait, j'ai copié le code dans un échantillon aléatoire de projet et a vu aucun problème. Comme lui, je soupçonne que vous pourriez avoir d'autres, plus sournois questions. Bonne chance!
OriginalL'auteur ravron
Xcode est un modèle qui fait à peu près ce que vous faites. à partir des résultats, je ne pense pas que vous devriez essayer d'exécuter la commande [auto.navigationController presentModalViewController:vc] et [auto.navigationController dismissModalViewControllerAnimated:] , mais plutôt de simplement [auto presentModalViewController:] et [auto dismissModalViewControllerAnimated:] .
de voir comment le modèle fait pour vous-même, vous pouvez utiliser l'assistant nouveau projet dans xcode 4.3 . peut-être qu'il fournira quelques conseils:
à partir de ce choix, cliquez sur Suivant, puis donner à votre projet de test d'un nom, choisissez "Universelle", désactiver automatique de comptage de référence, cliquez sur suivant, sauf dans le cas où vous le souhaitez.
maintenant, cliquez sur la cible, et de basculer la cible de déploiement à 4,3 (ou 4.0 si vous préférez) pour vos fins de test, et de passer à votre appareil ou de l'iOS 4.3 simulateur .
enfin, remplacer le code suivant dans applicationDidFinishLaunching:withOptions: dans le créé AppDelegate.m:
maintenant, lorsque je l'exécute, il ne cache pas les navigationBar. et dans le créé MainViewController.m à partir du modèle, vous allez voir comment il présente le modèle-vue-contrôleur et le congédie de la manette elle-même et non à partir de la manette de navigation. pour faire bonne mesure, afin de rendre le modèle de code de votre propre, aller dans MainViewController.m et de supprimer la ligne qui définit le modèle-vue-contrôleur de style transition ...
(bien sûr, dans iOS 5, avec des storyboards, la même chose peut tous être accompli avec modal enchaîne ... qui est la façon dont je l'ai fait pour les applications que je ne suis pas de soutien pour les pré-5.0 qui présentent un modalViewController dans ce mode.)
OriginalL'auteur john.k.doe
L'un de la meilleure solution pour utiliser cette Catégorie MaryPopin
https://github.com/Backelite/MaryPopin
OriginalL'auteur Abo3atef