关闭当前模态视图控制器卷曲效果并打开MFMailComposeViewController

时间:2014-04-28 06:08:58

标签: ios objective-c mfmailcomposeviewcontroller

我使用模态卷曲页面效果从tableview加载了一个菜单。因此,一旦用户点击某个按钮,就会显示此效果。当用户点击“联系我们”按钮时,将显示一个电子邮件撰写,但由于它是模态卷曲效果,因此隐藏了发送和取消按钮。
我很清楚,如果任何尺寸改变,苹果将拒绝该应用程序已经完成,所以我正在寻找一个替代方案:关闭当前模态效果,并推送一个新的MFMailComposeView。 我该怎么办?

编辑:代码如此

- (IBAction)sendEmail:(id)sender {

    // Email Subject
  //  NSString *emailTitle = @"Test Email";
    // Email Content
  //  NSString *messageBody = @"iOS programming is so fun!";
    // To address
    NSArray *toRecipents = [NSArray arrayWithObject:@"eli@gmail.com"];

    MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
    mc.mailComposeDelegate = self;
    [mc setSubject:@"Email"];
    [mc setMessageBody:message.text isHTML:NO];
    [mc setToRecipients:toRecipents];

    //    self.view.superview.bounds = CGRectMake(0, 0, self.view.bounds.size.width, 200);

    // Present mail view controller on screen
    [self presentViewController:mc animated:YES completion:NULL];
    //[self dismissViewControllerAnimated:YES completion:nil];
}

1 个答案:

答案 0 :(得分:0)

我想通了,它有点少但它值得。
首先,在应该调用发送电子邮件的动作的ViewController中,放置一个NSNotification,如下所示:

[self dismissViewControllerAnimated:YES completion:^{

[[NSNotificationCenter defaultCenter] postNotificationName:@"email" object:nil];

}];

稍后,当该视图消失时,原始视图控制器将显示,因为它是通过模态视图控制器调用的,在那一个放置:

-(void)createEmail{


  MFMailComposeViewController *  mc = [[MFMailComposeViewController alloc] init];
    NSArray *toRecipents = [NSArray arrayWithObject:@"elias@gmail.com"];
    mc.mailComposeDelegate = self;
    [mc setSubject:_emailSubject];
    [mc setMessageBody:_emailMessage isHTML:NO];
    [mc setToRecipients:toRecipents];

    [self presentViewController:mc animated:YES completion:nil];

}

并且,在viewDidload中,添加以下行:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(createEmail)
                                             name:@"email" object:nil];

这样,我们告诉原始视图控制器,在她的加载阶段,收听称为电子邮件的通知,当我们在电子邮件视图控制器中调用它时,应用程序将知道触发的通知已被触发,并将搜索她的以下操作,这是MFMailComposeViewController的委托。
这样,对于任何未来的开发人员,您将完成指定的目标