Использование MFMailComposeViewController работает нормально, когда телефон находится в UIInterfaceOrientationPortrait, однако, если я не разрешаю автоповорот, я получаю что-то подобное, когда пользователь поворачивает телефон:
Так что ярешил разрешить контроллер представления (который также является модальным представлением), который является частью представления, вызывающего вращение модального представления:
RootAppInfoViewController.h
#import <UIKit/UIKit.h>
@interface RootAppInfoViewController : UIViewController <UINavigationControllerDelegate>{
UINavigationController *navigationControl;
}
@property (nonatomic,retain) IBOutlet UINavigationController *navigationControl;
//dismisses this modal view
- (IBAction)selectHome:(id)sender;
@end
RootAppInfoViewController.m
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations.
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
(Кстати, этот автоматический поворот позволяет вращать весь вид).Но это простой контроллер представления, и я хочу, чтобы представление таблицы было представлено модально, поэтому у меня есть этот класс, на который ссылается RootAppInfoViewController.xib, который делает это модальное представление представлением таблицы:
AppInfoViewController.h
#import <UIKit/UIKit.h>
#import <MessageUI/MessageUI.h>
@interface AppInfoViewController : UITableViewController <MFMailComposeViewControllerDelegate, UINavigationControllerDelegate> {
NSMutableArray *dataSourceArray;
}
@property(nonatomic, retain) NSMutableArray *dataSourceArray;
@end
AppInfoViewController.m
//..
/* //NOTE: Commenting or uncommenting this block of code has no effect!
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations.
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}//*/
//...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
NSString *source = [[[self.dataSourceArray objectAtIndex:indexPath.section] objectForKey:kSourceKey] objectAtIndex:indexPath.row];
if(indexPath.section == kFeedbackSection) {
if([MFMailComposeViewController canSendMail]) {
// fill out email
//...
MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
//MailCompose *controller = [[MailCompose alloc] init];
controller.mailComposeDelegate = self;
[[controller navigationBar] setTintColor:[UIColor oceanColor]];
[controller setToRecipients:[NSArray arrayWithObject:kFeedbackEmail]];
[controller setSubject:emailSubject];
[controller setMessageBody:emailBodyTemplate isHTML:NO];
[self presentModalViewController:controller animated:YES];
[controller release];
} else {
[UIAlertHelper mailErrorAlert];
}
} //...
}
#pragma mark -
#pragma mark MFMailComposeViewControllerDelegate methods
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
[self dismissModalViewControllerAnimated:YES];
}
Комментирование или некомментирование кода авторотации в этом классе не имеет никакого эффекта.удерживая устройство в вертикальном положении и нажимая на строку, в которой загружается MFMailComposeViewControlleryeild, проблем не возникает, оно загружается в вертикальном положении, а затем вращается очень хорошо.Однако при загрузке табличного представления, удерживая его сбоку, а затем нажав на строку с помощью MFMailComposeViewController, загружается модальный контроллер представления в виде пустого экрана:
Это происходит как в симулятореи фактическое физическое устройство.
Кто-нибудь знает, что случилось?Заранее спасибо!