MFMailComposeViewController in landscape

无人久伴 提交于 2019-12-01 22:21:05

问题


My application is in landscape mod.When i call MFMailComposeViewController through Present model view, it comes in landscape mod.I rotate device and MFMailComposeViewController view goes to portrait mod i want to restrict this rotation it should always be in landscape mod only.Is there any way to do it..


回答1:


Subclass the MFMailComposeViewController class, so that you can override its shouldAutorotateToInterfaceOrientation to display it however you like:

@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

Specify the new class in place of 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];



回答2:


I found that a simple category for MFMailComposeViewController also worked. Since I like my app to rotate to any angle, I created & linked in MFMailComposeViewController+Rotate.h:

#import <Foundation/Foundation.h>
#import <MessageUI/MFMailComposeViewController.h>

@interface MFMailComposeViewController (Rotate)

@end

and 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

For my base line testing purposes (iOS 3.1.3), I don't seem to need to put it into the root view controller.

It is worth noting that BEFORE I did this, after my app would load MFMailComposeViewController, it would then stop rotating to any other orientation, even after MFMailComposeViewController was dismissed! Now my app remains freely rotatable.

  • Henry



回答3:


This worked for me, perfectly, with one minor change:

MailCompose *controller = [[MailCompose alloc] 
      initWithRootViewController:self.navigationController];
...

And I was convinced that I had to call the base-class initWithRootViewController method. Otherwise, how would the MFMailComposeViewController know about it? But it turns out the example above that simply calls [[MailCompose alloc] init] is enough. The underlying MFMailComposeViewController "just knows" how to display itself.

I love happy surprises like this. I posted this in case it is equally illuminating for anyone else.




回答4:


Create a new controller and inherit it from MFMailComposeViewController.In this controller just write one function shouldautorotate thing. Create instance of this.Now it will be working fine.



来源:https://stackoverflow.com/questions/1518499/mfmailcomposeviewcontroller-in-landscape

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!