首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在segue之前的MFMailComposeViewController模式视图阻止segue

在segue之前的MFMailComposeViewController模式视图阻止segue
EN

Stack Overflow用户
提问于 2013-02-05 15:13:10
回答 2查看 469关注 0票数 0

我在一个模式视图中使用按钮点击,这是我所能忍受的:

代码语言:javascript
复制
UIAlertView *   alert =
    [[UIAlertView alloc] initWithTitle: title
                               message: reason
                              delegate: self
                     cancelButtonTitle: @"New"
                     otherButtonTitles: @"View", nil];
    [alert show];

当在带有故事板的发送者的下面的"clickedButtonAtIndex“方法中单击”查看“按钮时,我调用了"self performSegueWithIdentifier:@"ModalSaleDetail1”iPhone :self;“

代码语言:javascript
复制
- (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex
{
    if ([alertView.title isEqualToString: @"Successful"]) {
        switch (buttonIndex) {
            case 0:     //  New transaction
            {
                if ([self.currentSale.lastStatus isEqualToString:@"approved"]) {
                    [self displayComposerSheet];
                }
                [self clearTransaction:nil];
                break;
            }
            case 1:     //  View Transaction Details
            {
                NSLog(@"User wants to view transaction details.");
                self.currentSale.cardNumber = self.currentSale.cardNumber.bulletRedacted;
                self.cardNumberField.text = self.displayCardNumberView.text = self.currentSale.cardNumber;

                if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {  // device is iPad
                    self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:1];
                    UISplitViewController *splitVC = (UISplitViewController *)(self.tabBarController.selectedViewController);
                    UINavigationController *navC = [[splitVC viewControllers] lastObject];
                    APSaleDetailViewController *salesDVC = (APSaleDetailViewController *)navC.topViewController;
                    // If came here from new sale set to self.currentSale, otherwise do not
                    if (!salesDVC.currentSale) {
                        salesDVC.currentSale = self.currentSale;
                    }
                    salesDVC.apNewTVC = self;
                    if ([self.currentSale.lastStatus isEqualToString:@"approved"]) {
                        [self displayComposerSheet];
                    }
                } else {                                                                        // device is iPhone
                    if ([self.currentSale.lastStatus isEqualToString:@"approved"]) {
                        [self displayComposerSheet];
                    }
                    [self performSegueWithIdentifier:@"ModalSaleDetail1" sender:self];
                }
                break;
            }
            default:
            {
                NSAssert1(NO, @"Unknown alert button %d", buttonIndex);
            }
        }
    } else if .....

在我用MFMailComposeViewController实现我的电子邮件发送器之前,这个段工作得很好。

我使用以下代码来显示MFMailComposeViewController的模式视图:

代码语言:javascript
复制
// Displays an email composition interface. Populates all the Mail fields.
-(void)displayComposerSheet
{
    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
    picker.mailComposeDelegate = self;

    [picker setSubject:@"Receipt for credit card transaction"];

    // Set up recipients
    NSArray *toRecipients = [NSArray arrayWithObject:self.currentSale.emailAddress];

    [picker setToRecipients:toRecipients];

    UIGraphicsBeginImageContext(self.view.frame.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    NSData * imageData = UIImageJPEGRepresentation(image, 1.0);

    if ( [MFMailComposeViewController canSendMail] ) {
        NSString *emailBody = @"Your credit card transaction summary and signature:";
        [picker setMessageBody:emailBody isHTML:NO];
        [picker addAttachmentData:imageData mimeType:@"image/jpeg" fileName:@"attachment"];
        NSData *myData = UIImagePNGRepresentation(self.signatureImage);
        [picker addAttachmentData:myData mimeType:@"image/png" fileName:@"Autograph"];
        [self presentModalViewController:picker animated:YES];
    }
}

现在,当self performSegueWithIdentifier:@"ModalSaleDetail1“sender:self在调用了self displayComposerSheet之后被调用时,不会发生分段。电子邮件编写器工作表显示正确,但在我发送或取消它之后,分段没有发生。如果我注释掉对self displayComposerSheet的调用,段就会正常发生(但当然没有电子邮件)。

顺便说一句,iPad代码可以很好地处理self displayComposerSheet调用,因为它不使用segues。

通常情况下,在呈现模式对话框后立即执行segue是否有效?

我正在为iOS 6.1构建Xcode4.6,并部署到iOS 5.1。我的iPhone运行5.1.1,我的iPad运行6.1。

EN

回答 2

Stack Overflow用户

发布于 2013-02-05 15:35:16

  • (void)performSegueWithIdentifier:(NSString *)标识符发送者:(Id)发送者NS_AVAILABLE_IOS(5_0);

您知道,此接口在iOS 5中不可用

票数 0
EN

Stack Overflow用户

发布于 2014-03-22 22:14:57

我知道,这不能解决您的Segues问题,但如果您尝试返回到以前的View Controller,请尝试以下操作:

代码语言:javascript
复制
[self dismissViewControllerAnimated:YES completion:nil];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14702011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档