我的应用程序是横向模式。当我通过Present模型视图调用MFMailComposeViewController时,它来自横向mod.I旋转设备和MFMailComposeViewController视图转到纵向模式我想要限制此旋转它应该始终只在横向模式中。有没有办法做到这一点..
答案 0 :(得分:6)
对MFMailComposeViewController类进行子类化,以便您可以覆盖其shouldAutorotateToInterfaceOrientation以显示它,但是您喜欢:
@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
指定新类代替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];
答案 1 :(得分:2)
我发现MFMailComposeViewController的一个简单类别也有效。由于我喜欢我的应用程序旋转到任何角度,我创建了&在MFMailComposeViewController + Rotate.h中链接:
#import <Foundation/Foundation.h>
#import <MessageUI/MFMailComposeViewController.h>
@interface MFMailComposeViewController (Rotate)
@end
和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
对于我的基线测试目的(iOS 3.1.3),我似乎不需要将它放入根视图控制器。
值得注意的是,在我执行此操作之后,在我的应用程序加载MFMailComposeViewController之后,它将停止旋转到任何其他方向,即使在MFMailComposeViewController被解除之后!现在我的应用程序可以自由旋转。
答案 2 :(得分:1)
这对我来说很完美,只有一个小小的改变:
MailCompose *controller = [[MailCompose alloc]
initWithRootViewController:self.navigationController];
...
我确信我必须调用基类initWithRootViewController
方法。否则,MFMailComposeViewController将如何知道它?但事实证明,只需调用[[MailCompose alloc] init]
就可以了。底层的MFMailComposeViewController“只知道”如何显示自己。
我喜欢这样的惊喜。我发布了这个,以防它对其他人同样有启发性。
答案 3 :(得分:0)
创建一个新的控制器并从MFMailComposeViewController继承它。在这个控制器中只写一个函数shouldautorotate的东西。创建this的实例。现在它将正常工作。