2009-10-05 5 views
3

내 응용 프로그램이 가로 모드입니다. 현재 모델보기를 통해 MFMailComposeViewController를 호출하면 가로 모드로 표시됩니다. 장치 및 MFMailComposeViewController보기가 세로 모드로 변경됩니다.이 회전을 항상 가로 방향으로 제한하고 싶습니다. 모드를 수행 할 수있는 방법이 있습니까?landscape 내 MFMailComposeViewController

답변

0

새 컨트롤러를 만들고 MFMailComposeViewController에서 상속하십시오.이 컨트롤러에서는 한 가지 기능 만 작성하면됩니다. this.Now의 인스턴스를 생성하면 잘 작동합니다.

6

서브 클래스 MFMailComposeViewController 클래스, 당신이 그것을 표시하기 위해 shouldAutorotateToInterfaceOrientation를 오버라이드 (override) 할 수 있도록 그러나 당신이 좋아 : 이것은 나를 위해 일한

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

:

@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] 
     initWithRootViewController:self.navigationController]; 
... 

그리고 기본 클래스 initWithRootViewController을 호출해야한다고 확신했습니다. 그렇지 않으면 MFMailComposeViewController가 어떻게 알 수 있습니까? 그러나 위의 예 에서처럼 단순히 [[MailCompose alloc] init]을 호출하는 것으로 충분합니다. 기본 MFMailComposeViewController는 "자신을 표시하는 방법을"알고 있습니다.

나는 이런 기쁜 소식을 사랑합니다. 다른 사람에게 똑같이 비추어 줄 경우를 대비하여이 글을 올렸습니다.

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 

(아이폰 OS 3.1.3), 루트 뷰 컨트롤러에 넣을 필요가없는 것 같습니다.

내 응용 프로그램이 MFMailComposeViewController를로드 한 후에이 작업을 수행하기 전에 MFMailComposeViewController가 해제 된 후에도 다른 방향으로 회전하지 않게됩니다. 이제 내 앱은 자유롭게 회전 할 수 있습니다.

  • 헨리