2010-09-30 5 views
1

Je présentais MFMailComposeViewController (mailController) en utilisant presentModalViewController sur mon UIViewController, dans mailController (sous-classe de MFMailComposeViewController) classe i ont shouldAutorotateToInterfaceOrientation overhide commeproblème orientation de l'appareil Ipad

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight); 
} 

Mais dans ma classe UIViewController j'ai shouldAutorotateToInterfaceOrientation overhide comme (ce qui est mon besoin de projet)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    { 
return NO; 
    } 

Après avoir présenté mon mailcontroller, si je faites pivoter l'appareil, il fonctionne parfaitement comme prévu (landsca soutien peleft/right orientation) dans iPhone ... Mais le même code ne fonctionne pas sur iPad. Est-ce que je fais une erreur ici? est-ce que c'est un bug d'Apple? Je présente à l'aide de cette API [myViewController presentModalViewController:mailController animated:YES];

et je reçois cet avertissement sur iPhone et iPad Le contrôleur de vue <UINavigationController: 0x7720920> returned NO from -shouldAutorotateToInterfaceOrientation: for all interface orientations. It should support at least one orientation.

Merci,

Répondre

5

Qu'est-ce que vous êtes en train de dire est: « Je ne supporte pas toute orientation », ce qui est bien sûr ... pas vrai.

Vous devez renvoyer true pour au moins une orientation. Par exemple:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
+0

Une fois que le mailcontroller est présenté et si je faites pivoter l'appareil le mailcontroller ne tourne pas dans l'iPad. mais j'ai utilisé le même code pour iPhone il fonctionne correctement sur iPhone. Je pense que c'est un bug de pomme. –

+0

Si c'est un bug, c'est sur l'iPhone, pas sur l'iPad. Dans tous les cas, cette méthode ne doit pas retourner FALSE pour chaque orientation. –

+0

La réponse de Philippe a fonctionné pour moi. –

0

Cette méthode permettra de fois l'orientation paysage:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return UIInterfaceOrientationIsLandscape(interfaceOrientation); 
} 
-2
MFMailComposeViewController *picker=[[MFMailComposeViewController alloc] init]; 
picker.mailComposeDelegate = self; 
[picker setSubject:self.title]; 
[picker setMessageBody:body isHTML:YES]; 
[picker shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft]; 
[picker shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight]; 
[picker shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortrait]; 
[picker shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortraitUpsideDown]; 
[self presentModalViewController:picker animated:YES]; 

Cela devrait corriger cela ...

+0

Comment et pourquoi cela fonctionnerait-il? Vous ne définissez pas une orientation, cela appelle simplement les méthodes "shouldAutorotate" encore et encore et je ne vois pas ce que cela permet d'obtenir. –

+0

Désolé mais un drapeau bas ou un drapeau ne répond pas à la question. Je ne vois toujours pas pourquoi/comment cela fonctionnerait-il? Si je suis un idiot avec ça et que ça marche vraiment, s'il te plait, dis-le moi. –