cocos2d MFMailComposeViewController

3

我尝试在我的应用程序中插入一个邮件工具...我的应用程序基于cocos2d引擎

工具栏(顶部的取消、发送...)可见,但我看不到mfMailComposerViewController视图的其他部分:-(

代码:

-(void)displayComposerSheet {   
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:@"my message"];

// Set up recipients
NSArray *toRecipients = [NSArray arrayWithObject:@"first@example.com"]; 
NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@example.com", @"third@example.com", nil]; 
NSArray *bccRecipients = [NSArray arrayWithObject:@"fourth@example.com"]; 

[picker setToRecipients:toRecipients];
[picker setCcRecipients:ccRecipients];  
[picker setBccRecipients:bccRecipients];

// Attach an image to the email
UIImage *screenshot = [[Director sharedDirector] screenShotUIImage];
NSData *myData = UIImagePNGRepresentation(screenshot);
[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"AdMotiv"]; 

// Fill out the email body text
NSString *emailBody = @"test";
[picker setMessageBody:emailBody isHTML:NO];
[[picker view] setFrame:CGRectMake(0.0f,0.0f,320.0f, 480.0f)];

[[picker view] setTransform:CGAffineTransformIdentity];
[[picker view] setBounds:CGRectMake(0.0f,0.0f,320.0f, 480.0f)];
//[[[VariableStore sharedInstance] parentView] setTransform: CGAffineTransformIdentity];
//[[[VariableStore sharedInstance] parentView] setBounds : CGRectMake(0.0f, 0.0f, 480.0f, 320.0f)];

UITextField *textfeld = [[UITextField alloc] initWithFrame:CGRectMake(50.0f, 50.0f, 100.0f, 100.0f)];
[[picker view] addSubview:textfeld];


[[[VariableStore sharedInstance] window]addSubview:picker.view];
[[[VariableStore sharedInstance] window] makeKeyAndVisible];


[picker release];
}

嗨, 我也有同样的问题。我的控制器甚至没有进入邮件控制器。我在cocos2d中使用了一个选择器来显示邮件控制器。-(void)goToFirstScreen:(id)sender {CCScene *Scene = [CCScene node]; CCLayer *Layer = [mailME node]; [Scene addChild:Layer]; [[CCDirector sharedDirector] setAnimationInterval:1.0/60]; [[CCDirector sharedDirector] pushScene: Scene];}mailMe是邮件控制器的类名。我认为以这种方式添加是错误的。如何在cocos2d中添加它? 谢谢。 - srikanth rongali
4个回答

4

嘿,终于成功了...看起来问题是由于一些动画引起的...现在我已经这样做了:

初始化:

emailController = [[UIViewController alloc] init];[[[CCDirector sharedDirector] openGLView] addSubview:emailController.view];

按钮点击事件:

[[CCDirector sharedDirector] pause];[[CCDirector sharedDirector] stopAnimation];

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; picker.mailComposeDelegate = self;

[picker setSubject:@"测试"]; [picker setMessageBody:@"JAJAJA" isHTML:YES];

[emailController presentModalViewController:picker animated:YES]; [picker release];

MFMailComposeViewController代理方法:

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { [[CCDirector sharedDirector] resume]; [[CCDirector sharedDirector] startAnimation]; [controller dismissModalViewControllerAnimated:NO]; }


0
需要执行一些步骤来实现应用内电子邮件功能。
第1步:添加MessageUI框架。
第2步:在.h文件中,#import "MessageUI/MessageUI.h"。还要添加委托MFMailComposeViewControllerDelegate,例如UIViewController *emailMe;
第3步:在.m文件的init函数中添加这些代码行。
CCMenuItem *emailItem = [CCMenuItemFont itemFromString: @"Email"     target:selfselector:@selector(emailCallback)];
CCMenu *menu = [CCMenu menuWithItems: emailItem, nil];
    menu.position = ccp(50,50);
    [self addChild:menu];

    emailMe = [[UIViewController alloc] init];
[[[CCDirector sharedDirector] openGLView] addSubview:emailController.view];

步骤4:在.m文件中添加这些方法

-(void)emailCallback
{
    [[CCDirector sharedDirector] pause];
    [[CCDirector sharedDirector] stopAnimation];

    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
    picker.mailComposeDelegate = self;

    [picker setSubject:@"Email test "];
    [picker setMessageBody:@"finally its working " isHTML:YES];

    [emailMe presentModalViewController:picker animated:YES];
    [picker release];
}

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
    [[CCDirector sharedDirector] resume];
    [[CCDirector sharedDirector] startAnimation];

    [controller dismissModalViewControllerAnimated:NO];
}

运行应用程序,完成了:)


@PriyaKerala:完全不能工作吗?能详细说明一下吗? - aToz
我使用了这段代码,但我的模拟器显示一个空白屏幕,与邮件无关的内容没有被显示出来。 - priya
它在iPad上可以工作,但在iPhone上无法工作。 <MFMailComposeViewController: 0x152db740> 在 <UIViewController: 0xc637d60> 上,其视图不在窗口层次结构中! - Solid Soft

0

嗨,我尝试了这段代码,它可以正常工作(动画不行,我不知道为什么,但选择器被正确移除了:)

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error 

{
//[picker dismissModalViewControllerAnimated:YES]; [picker.view removeFromSuperview];

{ //[picker dismissModalViewControllerAnimated:YES]; [picker.view removeFromSuperview]; }

}


0
在最后一位,将 picker 更改为 self,它应该可以工作。有些需要再次检查的是,您是否已将您的类设置为委托?即在头文件中设置 MFMailComposeViewControllerDelegate?如果没有,则不会收到消息。
顺便说一下,这是针对您发布的答案而不是初始问题的回复。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接