ios:sms消息生成器未显示

ios:sms消息生成器未显示,ios,uitableview,uiactionsheet,mfmessagecomposeview,Ios,Uitableview,Uiactionsheet,Mfmessagecomposeview,我有一个UITableViewController,它显示联系人列表,当用户选择一行时,它将显示一个UIActionSheet,要求用户执行操作(呼叫、发送短信…) 用户选择一个动作,第一个UIActionSheet将显示另一个包含电话号码的UIActionSheet 用户选择一个电话号码,这将显示SMS消息生成器 问题是,当用户选择电话号码时,message composer视图不会显示(只是一个黑屏),我会在MFMessageComposeViewController的didFinishWi

我有一个UITableViewController,它显示联系人列表,当用户选择一行时,它将显示一个UIActionSheet,要求用户执行操作(呼叫、发送短信…)

用户选择一个动作,第一个UIActionSheet将显示另一个包含电话号码的UIActionSheet

用户选择一个电话号码,这将显示SMS消息生成器

问题是,当用户选择电话号码时,message composer视图不会显示(只是一个黑屏),我会在MFMessageComposeViewController的didFinishWithResult中收到MessageComposeSultCancelled

这将生成此警告“警告:在演示或取消过程中尝试从视图控制器取消!”

如何正确调用并显示SMS消息生成器

(如果在用户使用didSelectRowAtIndexPath选择列表中的一行时直接调用它,则此操作非常有效)

下面是一些代码:

1-调用DidSelectRowatineXpath方法中的第一个UIActionSheet:

UIActionSheet *popupQuery;
...
[popupQuery showInView:self.view];
UIActionSheet *popupQuery2;
...
[popupQuery showInView:self.view];
2-在ClickedButtonIndex方法中调用第二个UIActionSheet:

UIActionSheet *popupQuery;
...
[popupQuery showInView:self.view];
UIActionSheet *popupQuery2;
...
[popupQuery showInView:self.view];
3-从同一方法调用message composer:

[self sendSMS:@"" recipientList:[phoneNumbers objectAtIndex:buttonIndex]];
    (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients
{
    MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
    if([MFMessageComposeViewController canSendText])
    {
        controller.body = bodyOfMessage;
        controller.recipients = recipients;
        controller.messageComposeDelegate = self;

        [self presentModalViewController:controller animated:YES];
    }
}
显示消息生成器的方法:

[self sendSMS:@"" recipientList:[phoneNumbers objectAtIndex:buttonIndex]];
    (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients
{
    MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
    if([MFMessageComposeViewController canSendText])
    {
        controller.body = bodyOfMessage;
        controller.recipients = recipients;
        controller.messageComposeDelegate = self;

        [self presentModalViewController:controller animated:YES];
    }
}

由于不想同时显示两个模式控件,请使用
actionSheet:didDismissWithButtonIndex:
delegate方法,以便在开始显示消息传递控制器时隐藏操作表

以下代码显示未自动取消的composer。 只有当我按下
取消
按钮时,我才能在日志中看到
0
,日志是
messagecomposesultcancelled
的值。您是否试图通过自动按下
send
按钮进行黑客攻击

MFMessageComposeViewController.h

enum MessageComposeResult {
    MessageComposeResultCancelled, //0
    MessageComposeResultSent,      //1
    MessageComposeResultFailed     //2
};
MyViewController.m

-(IBAction)onButtonPressed:(id)sender {
    UIActionSheet * sheet = [[UIActionSheet alloc] initWithTitle:@"Title"
                                                        delegate:self
                                               cancelButtonTitle:@"Go out"
                                          destructiveButtonTitle:@"Show message composer"
                                               otherButtonTitles:nil, nil];
    [sheet showInView:self.view];
}

-(void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
    MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init];
    if([MFMessageComposeViewController canSendText])
    {
        controller.body = @"body";
//        controller.recipients = recipients;
        controller.messageComposeDelegate = self;

        [self presentModalViewController:controller animated:YES];
    }
}

-(void) messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result {
    NSLog(@"%d", result);
    [controller dismissModalViewControllerAnimated:YES];
}
可在此处找到解决方案:


theRecipients是一个仅包含一个元素(所选电话号码)的数组。

您可以发布一些有关如何显示/解除视图控制器的代码吗?从错误消息中可以看出,它们的显示/取消方式存在问题。这是在实际的iDevice上发生的,还是刚刚在模拟器上进行了测试
canSendText
返回一个布尔值,指示当前设备是否能够发送文本消息。然而,
canSendText
在模拟器上可能会返回true,因为您可能在Mac上安装了messages应用程序(请参阅附加问题)。我正在iphone 5上测试,但该应用程序接收到“MessageComposer结果已取消”刚打完电话composer@dzk当您从
actionSheet:didDismissWithButtonIndex:
中显示composer时是否会发生这种情况?是的,它显示的不是消息composer,而是一个空白屏幕,如下所示@dzk使用概念验证更新了答案。请分享你的委托方法。我使用的代码与A-Live的类似。不,我不是在模拟发送动作。只是显示消息生成器。有时在日志中,我也会收到以下消息:-初始化错误域=\u UIViewServiceInterfaceErrorDomain代码=3“操作无法完成。(\u UIViewServiceInterfaceErrorDomain错误3.)”-远程编写控制器超时(否)!