【问题标题】:Pushing a navigation controller is not supported when using MFMessageComposeViewController使用 MFMessageComposeViewController 时不支持推送导航控制器
【发布时间】:2023-03-27 13:25:01
【问题描述】:

我正在使用此代码崩溃

不支持推送导航控制器

 MFMessageComposeViewController *messageController = [[MFMessageComposeViewController alloc] init];
    messageController.messageComposeDelegate = self;
    [messageController setRecipients:recipents];
    [messageController setBody:message];
    [self.parentViewController presentViewController:messageController animated:YES completion:nil];

【问题讨论】:

  • 你是如何定义你的导航控制器的?
  • 首先我使用 presentmodelview 控制器打开一个新视图来获取联系人列表,在这个视图控制器上我想使用 MFMessageComposeViewController 发送短信。@Retro
  • ContactListController *clc=[self.storyboard instantiateViewControllerWithIdentifier:@"clc"]; UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:clc]; [self.navigationController presentViewController:nav 动画:YES 完成:nil];

标签: ios messageui


【解决方案1】:
[self presentViewController:messageController animated:YES completion:nil];

【讨论】:

    【解决方案2】:

    您的视图是否在 NavigationController Stack 中?试试这个-

    [self.navigationController presentViewController:messageController animated:YES completion:nil];
    

    【讨论】:

    • [self dismissViewControllerAnimated:YES 完成:^{ UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:messageController]; [self.navigationController presentViewController:导航动画:是完成:无]; [self.parentViewController presentViewController:messageController 动画:YES 完成:nil]; }];
    • 这对我有用。 [selfdismissViewControllerAnimated:YES 完成:^{ [self.parentViewController presentViewController:messageInstance 动画:YES 完成:nil]; }];
    【解决方案3】:

    如果您使用的是storyboard.xib,下面的代码可以帮助您。

    添加MessageUI.framework

    为导入类写下这一行。

    #import <MessageUI/MessageUI.h>
    

    设置委托

    @interface ListViewController : UIViewController <MFMessageComposeViewControllerDelegate, UINavigationControllerDelegate>
    

    实现以下方法

    - (IBAction)sendMessage:(UIButton *)sender
    {
        if([MFMessageComposeViewController canSendText])
       {
            MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
            controller.body = @"Hello...";
            controller.recipients = [NSArray arrayWithObjects:@"recipient1, recipient2, recipient3", nil];
            controller.messageComposeDelegate = self;
            controller.delegate = self;
            [self presentViewController:controller animated:YES completion:nil];
       }
    }
    

    实现它的代理方法来解除

    #pragma mark - Message Delegate ============================
    
    - (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
    {
        switch (result)
        {
            case MessageComposeResultCancelled: break;
    
            case MessageComposeResultFailed:
            {
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Sorry, something went wrong, please try again." delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
            [alert show];
            }
            break;
    
            case MessageComposeResultSent: break;
    
            default: break;
        }
    
        [[controller presentingViewController] dismissViewControllerAnimated:YES completion:nil];
    }
    

    【讨论】:

      【解决方案4】:

      这是不可能的,因为docsMFMessageComposeViewControllerUINavigationController

      O-C @interface MFMessageComposeViewController : UINavigationController

      迅速 class MFMessageComposeViewController : UINavigationController

      【讨论】:

        猜你喜欢
        • 2013-07-19
        • 2012-06-04
        • 1970-01-01
        • 1970-01-01
        • 2013-03-09
        • 1970-01-01
        • 2016-08-22
        • 2014-01-11
        • 1970-01-01
        相关资源
        最近更新 更多