Mon application est en mode paysage.Quand j'appelle MFMailComposeViewController à travers la vue actuelle du modèle, il est en mode mod.Je fais pivoter le périphérique et la vue MFMailComposeViewController passe en mode portrait je veux restreindre cette rotation il doit toujours être en paysage mod seulement.Il ya un moyen de le faire ..MFMailComposeViewController en paysage
Répondre
Créer un nouveau contrôleur et l'hériter de MFMailComposeViewController.Dans ce contrôleur il suffit d'écrire une fonction devraitautorototer. Créer une instance de this.Now, cela va fonctionner correctement.
Sous la classe MFMailComposeViewController, de sorte que vous pouvez remplacer son shouldAutorotateToInterfaceOrientation pour l'afficher comme bon vous semble:
@interface MailCompose : MFMailComposeViewController {
}
@end
@implementation MailCompose
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
@end
Spécifiez la nouvelle classe à la place de MFMailComposeViewController:
MailCompose *controller = [[MailCompose alloc] init];
controller.mailComposeDelegate = self;
[controller setSubject:@"In app email..."];
[controller setMessageBody:@"...email body." isHTML:NO];
[self presentModalViewController:controller animated:YES];
[controller release];
Cela a fonctionné pour moi , parfaitement, avec un changement mineur:
MailCompose *controller = [[MailCompose alloc]
initWithRootViewController:self.navigationController];
...
Et j'étais convaincu que je devais appeler la méthode initWithRootViewController
de classe de base. Sinon, comment le MFMailComposeViewController le sait-il? Mais il s'avère que l'exemple ci-dessus qui appelle simplement [[MailCompose alloc] init]
est suffisant. Le sous-jacent MFMailComposeViewController "sait juste" comment se montrer.
J'adore les bonnes surprises comme celle-ci. J'ai posté ceci au cas où il est également éclairant pour quelqu'un d'autre.
J'ai trouvé qu'une catégorie simple pour MFMailComposeViewController a également fonctionné. Depuis que j'aime mon application pour tourner à un angle, j'ai créé & lié à MFMailComposeViewController + Rotate.h:
#import <Foundation/Foundation.h>
#import <MessageUI/MFMailComposeViewController.h>
@interface MFMailComposeViewController (Rotate)
@end
et MFMailComposeViewController + Rotate.m
#import "MFMailComposeViewController+Rotate.h"
@implementation MFMailComposeViewController (Rotate)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
// return the desired orientation mask from http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html
return /*mask*/;
}
@end
Pour mes fins de test de ligne de base (iOS 3.1.3), je ne semble pas avoir besoin de le mettre dans le contrôleur de vue racine.
Il est à noter que AVANT que je l'ai fait, après que mon application chargerait MFMailComposeViewController, il cesserait de tourner à toute autre orientation, même après que MFMailComposeViewController ait été fermé! Maintenant, mon application reste librement rotative.
- Henry