过去两天我只是尝试启用从我的应用中发送电子邮件。希望这里的一个聪明的人可以帮助我。 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视图的一部分,我该如何显示它们?
答案 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];
我希望这可以提供帮助!