0

J'ai une application de vue fractionnée assez simple adaptée à partir du code de l'iPhone. La fonctionnalité principale est dans les classes partagées avec des classes spécifiques iPhone et iPad héritant et augmentant le code. Toutes les classes utilisées dans l'application iPad ont les suivantes:iPad UISplitViewController pivote inutilement lorsque la boîte de dialogue modale est fermée

 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Overriden to allow any orientation. 
    return YES; 
} 

Le contrôleur de la vue principale consiste en une UIToolbar et un UITableView. Le répond aux rotations correctement à chaque étape bar deux. Si je présente une boîte de dialogue modale de ce point de vue:

 

navigationController = [[UINavigationController alloc] initWithRootViewController:tvc]; 
navigationController.modalPresentationStyle = UIModalPresentationFormSheet; 
[self presentModalViewController:navigationController animated:NO]; 

Tout fonctionne comme prévu, y compris la rotation du dispositif jusqu'à ce que je rejette la boîte de dialogue de quelque manière que:

 
[self dismissModalViewControllerAnimated:YES]; 

à quel point mon point de vue principal tourne 90 degrés. J'ai examiné les paramètres dans les fichiers nib et tout semble bien se passer. Aucun conseil? Un dialogue modal présenté par UITableView sur le côté gauche ne présente pas ce problème.

Question bonus:

J'ai découvert la boîte de dialogue modale présenté par la vue de gauche a un pépin. Mais seulement un. S'il est présenté par la vue popover en mode portrait et que l'appareil est pivoté, vous obtenez un pépin graphique assez impressionnant car il pivote hors de la vue pour toujours!

+0

Une coque d'une application de vue éclatée que j'ai rapidement frappé n'affiche pas le problème, donc je vais comparer et contraster et afficher la solution quand je la trouverai. – Diziet

+0

Définir des points d'arrêt et parcourir les émissions que shouldAutorotatetoInterfaceOrientation est appelée sur chaque vue affichée lorsque le contrôleur de vue modale est présenté. Cela semble terriblement étrange quand la vue n'a pas été tournée. – Diziet

+0

Remarque - Le comportement mentionné comme «étrange» ci-dessus semble être normal. Ce que je pense encore est sanglant étrange; pourquoi ces appels sont-ils effectués lorsque l'appareil n'est pas tourné? La disposition de mon application est que la fenêtre d'affichage principale se compose d'un xib contenant un UIView (avec UIToolbar & UITableView) et un UITableViewController. Tout cela est normalement lié via IB. J'ai lu ailleurs qu'avoir des contrôleurs de vue à l'intérieur des contrôleurs de vue est une idée vraiment stupide, donc je vais fusionner le code en un. Il y a une raison historique c'est séparé mais c'est essentiellement: la simplicité + la paresse. – Diziet

Répondre

0

Comme indiqué dans le commentaire ci-dessus, j'ai réussi à fusionner les deux contrôleurs de vue en un, en intégrant le code pour gérer le contrôleur toolbar + splitview dans la version iPad. À l'origine, il existait une classe commune héritée de UITableViewController, à la fois les versions iPad et iPhone du code hérité de cette classe commune. Le problème était sur l'iPad Je voulais une barre d'outils en haut et je devais aussi supporter le contrôleur splitview. Cela posait problème étant donné que la classe était UITableViewController, j'ai donc créé une classe parente contenant la barre d'outils et le contrôleur tableview plus le code splitview. En refactoring j'ai changé la classe commune en un UIViewController et fait les modifications pour soutenir un UITableView dans le code, comme d'habitude et instruit dans plusieurs livres de dev de l'iPhone. Dans la version iPhone de la classe I, créez manuellement UITableView avec les méthodes nécessaires. Dans la version iPad, il provient d'un fichier xib. Cela simplifie schématiquement les choses car maintenant la vue principale n'a pas de contrôleur dans un contrôleur. Il résout également le problème. L'interface utilisateur tournant de 90 degrés lors de la fermeture d'un dialogue modal ne se produit plus.

Questions connexes