1

J'ai un UITableViewController qui pousse un UIViewController en utilisant un UINavigationController:présente/dismissModalViewController provoque UINavigationBar « Retour » perdre animation

[self.navigationController pushViewController:detailViewController animated:YES]; 

Dans le detailViewController, je présente une vue modale lorsque l'utilisateur tape un bouton (un MFMessageComposeViewController pour envoyer un message SMS), puis le rejeter, comme ceci:

[self presentModalViewController:smsViewController animated:YES]; 
... 
// user pushes Send or Cancel button on the view 
... 
[self dismissModalViewControllerAnimated:YES]; 

la vue modale SMS rejette correctement, mais maintenant, quand je clique sur le bouton « Retour » sur le UINavigationBar, les vues n'animent pas en arrière au vue de la table. La vue détaillée disparaît juste et la vue de UITableViewController est là. Le bouton Précédent s'anime et disparaît et la cellule de tableau sélectionnée conserve l'effet bleu pâle, mais il n'y a pas d'animation de vue.

Est-ce que quelqu'un sait pourquoi les vues ne s'animent pas correctement? Si je n'ouvre pas la vue modale SMS, alors l'animation fonctionne correctement, donc je suis à peu près sûr que c'est dû au comportement modal.

Voilà comment mon arrangement de vue Interface Builder cherche Bar Tab article:

View Arrangement

+0

Avez-vous essayé ceci sans animation? Je ne trouve aucune raison qui pourrait causer le même problème. C'est une pratique très courante. – Tarun

+0

Désolé, je ne suis pas sûr de ce que vous voulez dire. Essayez quoi sans animation? Si je change l'un des OUI à NON de mes extraits de code, je ne suis pas sûr de ce qu'il accomplirait. Cela rend ces comportements non animés. – spurgeon

Répondre

0

J'ai découvert mon problème. J'utilise une sous-classe UITabBarController personnalisée qui remplace -(void)viewWillAppear:(BOOL)animated avec une gestion de barre d'onglets personnalisée. Cependant, je n'appelais pas [super viewWillAppear:animated] dans la méthode substituée. Oui, un triste jour dans ma vie de développeur. Il me semble toujours étrange que cela provoque le comportement que j'ai vécu, mais je suis certain que c'est maintenant corrigé en raison de ce changement. Il est intéressant de noter que l'animation modale push/leave fonctionne correctement sans l'appel [super viewWillAppear:animated] dans le simulateur iPhone 4.3. Mais, cela ne fonctionne pas dans les simulateurs iPhone 5.0 ou 5.1. (J'ai utilisé un non-MFMessageComposeViewController pour texter le comportement modal sur le simulateur de l'iPhone puisque le SMS n'est pas supporté sur le simulateur).

0

S'il vous plaît modifier cette ligne [self.navigationController pushViewController:detailViewController]; à

[self.navigationController pushViewController:detailViewController animated:YES]; 

Et vérifier si viewWillAppear et viewWillDisappear méthodes de votre DetailView défini sur YES.

+0

Oups, j'ai manqué 'animated: YES' dans mon copier/coller pour l'extrait de code. C'est corrigé maintenant. Intéressant, quand j'implante '- (void) viewWillDisappear: (BOOL) animated' dans detailViewController et imprime la valeur' animated', il change à NO lorsque la vue modale est présentée et affichée. Pourquoi cela se produit-il, et comment puis-je changer 'animé 'en OUI? – spurgeon

+0

définissez-vous '- (void) viewWillAppear: (BOOL) animated' à YES? Veuillez définir les deux méthodes de la vue modale sur YES. –

+0

Dans detailViewController, je définis à la fois '[self viewWillAppear: YES];' et '[self viewWillDisappear: YES];' après le '[self presentModalViewController: smsModalView animé: YES];' et '[self dismissModalViewControllerAnimated: YES];' , mais sans effet. D'autres suggestions? Encore une fois, la vue modale s'anime bien, mais pas la vue détaillée en arrière à la vue de la table. – spurgeon

Questions connexes