iphone - 添加MFMailComposeViewController视图(应用程序内电子邮件)

时间:2009-07-05 00:12:04

标签: iphone email uiviewcontroller

过去两天我只是尝试启用从我的应用中发送电子邮件。希望这里的一个聪明的人可以帮助我。 presentModalViewController对我不起作用(只是崩溃应用程序没有解释为什么),所以我被迫添加MFMailComposeViewController的视图。这是我的尝试:

MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
    controller.mailComposeDelegate = self;
    [controller setSubject:@"test subject"];
    [controller setMessageBody:@"this is the message body" isHTML:NO];

    //  [self presentModalViewController:controller animated:YES]; //this crashes the app
//so I try this instead:        
    controller.view.frame = CGRectMake(0,0,480,320);
    [self.view addSubview:controller.view];
    [controller release];

添加到屏幕的内容仅为主题栏,带有取消和发送按钮。没有显示任何文本字段(To:,Cc:,Subject,body)。为什么它们不是MFMailComposeViewController视图的一部分,我该如何显示它们?

5 个答案:

答案 0 :(得分:2)

老实说,你应该使用presentModalViewController。不要强行绕过SDK,考虑调试崩溃。打开调试器,查看控制台中是否记录了任何异常。检查崩溃日志等......

另外,请确保self是正确的委托和UIViewController子类。

答案 1 :(得分:2)

我已经解决了这个问题:

不要这样:

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

但是这个:

MFMailComposeViewController *mailComposeViewController = [MFMailComposeViewController new];

答案 2 :(得分:1)

你应该尝试:

[[self navigationController] presentModalViewController...];

因为这是呈现它的正确方法。不幸的是,尝试手动添加其视图是完全错误的,并且永远不会有效。

答案 3 :(得分:1)

好吧,我已经确定必须创建一个虚拟视图控制器,否则不会滑入。

我创建了一个名为Sys_Mail的类@interface Sys_Mail : UIViewController <MFMailComposeViewControllerDelegate>

然后我基本上创建了一个根视图视图控制器。我用肖像/风景进行了几个小时的摔跤,但确定如果你将视图控制器附加到顶层视图(包含我的风景变换),那么它将作为风景窗口滑入。只有一个视觉故障,当新窗口滑入时,父窗口会移动几秒钟,这是景观变换对父母做奇怪事情的副作用....

为了在滑动窗口上获取横向方向,您必须在Sys_Mail类中声明一个处理自动旋转消息的方法:

//=======================
//    shouldAutorotateToInterfaceOrientation
//=======================
//  see if this ever gets called for the view controller
-(BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation 
{ 
  if (TRACE) printf ("shouldAutorotateToInterfaceOrientation\n");
  return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);  // or whatever orientation is needed
}

变量gMasterView指的是我的顶级视图(具有横向变换并附加到窗口)。子视图似乎不起作用,视图控制器很糟糕他们是更多的设计模式CRAP。我希望完全控制我的观点而不是某些微软的MFC类型crud!

Sys_Mail* g_root_vc;

if (g_root_vc == nil) {
  //  create an empty view controller so we have something to work with
  g_root_vc = [[Sys_Mail alloc] init];
  g_root_vc.view = (UIView*) gMasterView; 
}

所以这个

答案 4 :(得分:0)

我遇到了同样的崩溃,最后我可以通过向[self navigationController]发送presentModalViewController消息来修复它。

这是我的代码:

// Create the Mail composer view controller
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];

// Set the view controller delegate
controller.mailComposeDelegate = self;

// Set recipients, if you want
[controller setToRecipients:recipients];

// Set subject, if you want
[controller setSubject:@"The subject"];

// Set message body, if you want
[controller setMessageBody:@"The message body" isHTML:YES]; // isHTML -> YES/NO depending the message body

// Present the view controller 
[[self navigationController] presentModalViewController:controller animated:YES];

// Memory management
[controller release];

我希望这可以提供帮助!