处理 MFMailComposeViewController 不会带回我在 iPhone 上的旧视图,但可以在 iPad 上使用
Posted
技术标签:
【中文标题】处理 MFMailComposeViewController 不会带回我在 iPhone 上的旧视图,但可以在 iPad 上使用【英文标题】:Disposing MFMailComposeViewController wont bring back my old view on iPhone but works on iPad 【发布时间】:2011-10-07 08:26:11 【问题描述】:我是 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;
【问题讨论】:
我在您的代码中看到的添加 modalViewControllers 的唯一异常是 [[self getTopApplicationWindow] addSubview:customUIViewController.view];你为什么这样做?这很可能会导致您的问题。 这是我正在使用的插件。我不是自己构建的,而且我是 Objective-C 的初学者,所以我真的不知道为什么要这样做。我认为这是必要的,所以我没有尝试删除它。我现在就这样做。 这实际上是插件工作所必需的。由于该插件是从 Unity3d 调用的,我想我需要找到要附加到的正确窗口。 你会弄明白的^^ 但是如果你想看到一个工作的 modalViewController 原型检查这个问题(在第一次编辑中)。 ***.com/questions/7607271/… 谢谢,我去看看:) 【参考方案1】:您应该使用以下方式呈现邮件编写器:
[self presentModalViewController:controller animated:YES];
在你的委托方法中你应该调用:
[self dismissModalViewControllerAnimated:YES];
都假设self
是UIViewController
【讨论】:
以上是关于处理 MFMailComposeViewController 不会带回我在 iPhone 上的旧视图,但可以在 iPad 上使用的主要内容,如果未能解决你的问题,请参考以下文章
HttpApplication处理对象与HttpModule处理模块