我有一种操作工作表UIView它调用MFMailComposeViewController后点击一个按钮,MFMailComposeViewController被调用并呈现成功,但它并没有关闭时,我点击取消和有时会崩溃,我知道这是一个已知的问题,但我已经尝试了所有已知的修复程序,但它不适用于我。这是我的代码:MFMailComposeViewController委托方法没有被调用
SendFeedback.h:
#import <UIKit/UIKit.h>
#import <MessageUI/MessageUI.h>
@interface SendFeedback : UIView <UITableViewDelegate, UITableViewDataSource, MFMailComposeViewControllerDelegate, UINavigationControllerDelegate>
//Useless code to the problem.
@property (nonatomic, retain) MFMailComposeViewController *feedBackComposer;
@end
SendFeedback.m:
- (void)baseInit
{
//Useless code to the problem.
feedBackComposer = [[MFMailComposeViewController alloc] init];
[feedBackComposer setMailComposeDelegate:self];
[feedBackComposer setToRecipients:[NSArray arrayWithObject:@"[email protected]"]];
[feedBackComposer setMessageBody:@"" isHTML:NO];
[feedBackComposer setSubject:@"What I Love About iBox"];
}
,并呼吁作曲家: - (无效)sendFeedbackComposer { [ self.window.rootViewController presentViewController:feedBackComposer animated:YES completion:nil]; }
予以驳回:
- (void)mailComposeController:(MFMailComposeViewController *)feedBackComposer didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
//This method doesn't get called.
[self.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
NSLog(@"Error: %@", error);
}
编辑:所以,在这个问题上所提供的所有的答案是正确的,这是我所有的坏。我想要做的是:我有一个UINavigationController
,其中包括该视图中的cells
的UITableView
应该可以将其作为一个subview
,就像以前一个触发动作片这是一个UITableView
,这种观点还包括cells
和其中一人会做一个动作,它会调用一个MFMailComposeViewController
,它会被调用,但即使设置了委托并且所有方法都是正确的,也不会成功解除,问题的原因在于调用MFMailComposeController
的方式,我首先从超级视图中删除了一点,UITableView
然后提出了MFMailComposeController
,所以当我解雇邮件作曲者时,它甚至没有给出结果而崩溃,这使我把崩溃的原因与委托方法混淆起来,骗了我。 下面的代码:
- (void)removeView
{
if (self) {
[UIView animateWithDuration:0.3
animations:^{backgroundView.alpha = 0;}
completion:^(BOOL finished){
[UIView animateWithDuration:.3
animations:^{self.frame = CGRectMake(0, 568, 320, 568);}
completion:^(BOOL finished){[self removeFromSuperview];}];
}];
}
}
- (void)sendFeedbackComposer
{
feedBackComposer = [[MFMailComposeViewController alloc] init];
[feedBackComposer setMailComposeDelegate:self];
[feedBackComposer setToRecipients:[NSArray arrayWithObject:@"[email protected]"]];
[feedBackComposer setMessageBody:@"" isHTML:NO];
[feedBackComposer setSubject:@"What I Love About iBox"];
[self.window.rootViewController presentViewController:self.feedBackComposer animated:YES completion:nil];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.row) {
case 2: //That's the index of the MailComposer caller.
[self removeView];
[self sendFeedbackComposer];
break;
case 6:
[self removeView];
break;
default:
break;
}
}
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
[feedBackComposer.presentingViewController dismissViewControllerAnimated:YES completion:nil];
NSLog(@"Error: %@", error);
}
感谢斯特凡·阿塔纳索夫,吉姆和维塔利·S.
'sendFeedbackComposer'方法是从其他类调用? – Robert
不,来自同一班,它是一个UIView。 –
其他实施的委托从这个类是否正常工作? – Robert