MFMailComposeViewController в ландшафте - PullRequest
3 голосов
/ 05 октября 2009

Мое приложение находится в ландшафтном режиме. Когда я вызываю MFMailComposeViewController через представление «Представить модель», оно входит в ландшафтный режим. Я поворачиваю устройство, а представление MFMailComposeViewController переходит в портретный режим. Я хочу ограничить это вращение, оно всегда должно быть только в ландшафтном режиме. Есть ли способ сделать это ..

Ответы [ 4 ]

6 голосов
/ 26 апреля 2010

Подкласс класса 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];
2 голосов
/ 12 марта 2011

Я обнаружил, что простая категория для 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 будет отклонен! Теперь мое приложение остается свободно вращающимся.

  • Henry
1 голос
/ 23 ноября 2010

Это сработало для меня, отлично, с одним незначительным изменением:

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

И я был убежден, что мне нужно вызвать метод initWithRootViewController базового класса. Иначе как бы MFMailComposeViewController узнал об этом? Но оказывается, что приведенный выше пример достаточно просто [[MailCompose alloc] init]. Базовый MFMailComposeViewController «просто знает», как отображать себя.

Я люблю такие счастливые сюрпризы. Я разместил это на тот случай, если это будет одинаково полезно для всех остальных.

0 голосов
/ 07 октября 2009

Создайте новый контроллер и унаследуйте его от MFMailComposeViewController. В этом контроллере просто напишите одну функцию, которая должна содержать информацию. Создайте экземпляр этого. Теперь он будет работать нормально.

...