Ana*_*nam 4 iphone objective-c ios4
我正试图加入MFMailComposeViewController
我的应用程序.当我以模态方式呈现它时,发送按钮工作正常并且发送电子邮件,这意味着在这种情况下发送给委托的结果是正确的.
而当我点击取消按钮时它会挂起应用程序.日志也没有显示错误,只是屏幕变暗,一切都被禁用.显然,结果没有传递给委托(我通过日志检查).它似乎是
(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
Run Code Online (Sandbox Code Playgroud)
每次按下取消按钮时都不会调用.可能这就是为什么没有显示动作表(保存草稿,取消,删除草稿)的原因,因此应用程序就在那里挂起.
我正在使用Apple的示例应用程序(MailComposer)中的确切代码,它在那里工作得很好,但在某种程度上我的失败.:(
如果有人遇到同样的问题并成功解决了,请帮助我.
我的代码:
-(IBAction)emailButtonPressed:(id)sender{
Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
if (mailClass != nil)
{
if ([mailClass canSendMail])
{
[self displayComposerSheet];
}
else
{
[self launchMailAppOnDevice];
}
}
else
{
[self launchMailAppOnDevice];
}
}
#pragma mark -
#pragma mark Compose Mail
-(void)displayComposerSheet
{
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[picker setSubject:@"Ilusiones"];
// Set up recipients
NSArray *toRecipients = [NSArray arrayWithObject:@"anam@semanticnotion.com"];
[picker setToRecipients:toRecipients];
// Attach a screenshot to the email
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *myData = UIImagePNGRepresentation(viewImage);
[picker addAttachmentData:myData mimeType:@"image/png" fileName:@"viewImage"];
// Fill out the email body text
NSString *emailBody = @"";
[picker setMessageBody:emailBody isHTML:NO];
[self presentModalViewController:picker animated:YES];
[picker release];
}
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
switch (result)
{
case MFMailComposeResultCancelled:
NSLog(@"Result: canceled");
break;
case MFMailComposeResultSaved:
NSLog(@"Result: saved");
break;
case MFMailComposeResultSent:
NSLog( @"Result: sent");
break;
case MFMailComposeResultFailed:
NSLog( @"Result: failed");
break;
default:
NSLog(@"Result: not sent");
break;
}
[self dismissModalViewControllerAnimated:YES];
}
#pragma mark -
#pragma mark Workaround
-(void)launchMailAppOnDevice
{
NSString *recipients = @"mailto:anam@semanticnotion.com.com?cc=second@example.com,third@example.com&subject=illusions!";
NSString *body = @"&body=xyz";
NSString *email = [NSString stringWithFormat:@"%@%@", recipients, body];
email = [email stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:email]];
}
Run Code Online (Sandbox Code Playgroud)
方法
(void)mailComposeController:(MFMailComposeViewController*)controller
didFinishWithResult:(MFMailComposeResult)result
error:(NSError*)error
Run Code Online (Sandbox Code Playgroud)
永远不会被调用,因为你UIActionSheet
在取消后没有按任何按钮,因为它没有在屏幕上显示.
发生这种情况的原因是UIActionSheet
屏幕外显示.如果您检查调试日志,您可能会看到一条消息,说明由其超级视图剪切的演示操作表.某些控件可能无法响应触摸.在iPhone上尝试-[UIActionSheet showFromTabBar:]
或-[UIActionSheet showFromToolbar:]
代替-[UIActionSheet showInView:]
."
这就是为什么你看到你的视野越来越暗,但没有UIActionSheet
出现.
在我的情况下,问题是我的应用程序是通用的,但由于某种原因,只有一个MainWindow.xib
,它比iPhone屏幕大小(事实上,它是iPad屏幕大小).
解决方案是创建MainWindow-iPhone.xib
具有正确尺寸的另一个,并更改名为主nib文件库(iPad)和主nib文件库(iPhone)的Info.plist条目,以便它们指向正确的文件.问题解决了!
希望能帮助到你.
归档时间: |
|
查看次数: |
2814 次 |
最近记录: |