gpt4 book ai didi

iphone - 当点击 MFMailComposeViewController 的取消按钮时,操作表不显示

转载 作者:太空狗 更新时间:2023-10-30 03:59:51 26 4
gpt4 key购买 nike

我正在尝试将 MFMailComposeViewController 合并到我的应用程序中。当我以模态方式呈现时,发送按钮工作正常并且电子邮件已发送,这意味着在这种情况下发送给代表的结果是正确的。

而当我点击取消按钮时,它挂断了应用程序。日志也没有显示任何错误,只是屏幕变暗,一切都被禁用。显然,结果没有传递给委托(delegate)人(我通过日志检查过)。看来

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

永远不会在按下取消按钮时被调用。可能这就是为什么未显示操作表(保存草稿取消删除草稿)并因此应用程序卡在那里的原因。

我使用的是 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]];
}

最佳答案

方法

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

永远不会被调用,因为您在取消后没有按任何 UIActionSheet 按钮,因为它没有显示在屏幕上。

发生这种情况的原因是 UIActionSheet 出现在屏幕外。如果您检查调试日志,您可能会看到一条消息,内容为 Presenting action sheet clipped by its superview。某些控件可能不会响应触摸。在 iPhone 上尝试 -[UIActionSheet showFromTabBar:]-[UIActionSheet showFromToolbar:] 而不是 -[UIActionSheet showInView:]。”

这就是为什么您会看到 View 变暗,但没有 UIActionSheet 出现。

在我的例子中,问题是我的应用程序是通用的,但由于某种原因只有一个 MainWindow.xib,而且它比 iPhone 屏幕尺寸大(事实上,它是, iPad 屏幕尺寸)。

解决方案是创建另一个具有正确尺寸的 MainWindow-iPhone.xib 并更改名为 Main nib file base (iPad)Main nib file base (iPhone) 以便它们指向正确的文件。问题解决了!

希望对您有所帮助。

关于iphone - 当点击 MFMailComposeViewController 的取消按钮时,操作表不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4274895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com