1

電話がUIInterfaceOrientationPortraitにある場合、MFMailComposeViewControllerの使用は正常に機能しますが、自動回転を許可しない場合、ユーザーが電話を回転すると次のようになります。

ここに画像の説明を入力してください

そこで、モーダルビューを呼び出すビューの一部であるビューコントローラー(モーダルビューでもある)を回転させることにしました。

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];
}

このクラスの自動ローテーションコードをコメント化または非コメント化しても効果はありません。デバイスを直立させたまま、MFMailComposeViewControlleryeildsをロードする行をクリックしても問題はありません。デバイスは直立してロードされ、正常に回転します。ただし、テーブルビューをロードし、横向きに保持してからMFMailComposeViewControllerで行をタップすると、モーダルビューコントローラーが空白の画面としてロードされます。

ここに画像の説明を入力してください

これは、シミュレータと実際の物理デバイスの両方で発生します。

誰もが何が起こっているのか知っていますか?前もって感謝します!

4

1 に答える 1