处置MFMailComposeViewController不会在iPhone上恢复旧视图,但可以在iPad上运行

时间:2011-10-07 08:26:11

标签: iphone objective-c ipad

我是iPhone / iPad开发的新手,我在使用Unity3d的插件时遇到了一些问题。

该插件弹出MFMailComposeViewController,并允许用户从游戏中发送电子邮件。用户完成后,窗口应该消失,游戏继续运行。

这适用于iPad,但不适用于iPhone。

在iPhone上移除窗口后,游戏无法重新获得控制权。图形仍然呈现,但无法判断游戏是否仍在运行或是否只是静止图像(因为它位于没有动态图形的菜单中)

以下是一些如何完成此操作的代码:

-(IBAction)launchEmailView:(NSString*)address subject:(NSString*)subject message:(NSString*)message {
    customUIViewController = [[InAppEmailViewController alloc] init];
    [[self getTopApplicationWindow] addSubview:customUIViewController.view];

    MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];

    [controller setSubject:subject];
    [controller setToRecipients:[NSArray arrayWithObject:address]];
    [controller setMessageBody:message isHTML:NO];
    [controller.navigationBar setTintColor:[UIColor redColor]];

    [customUIViewController presentModalViewController:controller animated:YES];
    controller.mailComposeDelegate = self;
    [controller release];
}



-(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
    [customUIViewController dismissModalViewControllerAnimated:YES];
    [customUIViewController.view removeFromSuperview];
    [customUIViewController release];
    controller = nil;
}

阅读文档我只能假设这与此有关:

  

presentModalViewController:动画:   向用户显示由给定视图控制器管理的模态视图。

     

在iPhone和iPod touch设备上,modalViewController的视图始终以全屏显示。在iPad上,演示文稿取决于modalPresentationStyle属性中的值。

问题不在于iPad,所以我的猜测是我需要以全屏方式处理这个问题?

非常感谢任何帮助。

此致 尼古拉斯

[编辑]

经过一些评论来回后,我决定添加查找topWindow的功能

-(UIWindow*)getTopApplicationWindow
{
    UIApplication* clientApp = [UIApplication sharedApplication];
    NSArray* windows = [clientApp windows];
    UIWindow* topWindow = nil;

    if (windows && [windows count] > 0)
            topWindow = [[clientApp windows] objectAtIndex:0];

    return topWindow;
}

1 个答案:

答案 0 :(得分:0)

您应该使用以下方式展示邮件编辑器:

[self presentModalViewController:controller animated:YES];

在您的委托方法中,您应该致电:

[self dismissModalViewControllerAnimated:YES];

假设selfUIViewController