MFMailComposeViewController在风景中

时间:2009-10-05 06:24:03

标签: mfmailcomposeviewcontroller

我的应用程序是横向模式。当我通过Present模型视图调用MFMailComposeViewController时,它来自横向mod.I旋转设备和MFMailComposeViewController视图转到纵向模式我想要限制此旋转它应该始终只在横向模式中。有没有办法做到这一点..

4 个答案:

答案 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的实例。现在它将正常工作。