【问题标题】:ios : sms message composer not showingios:短信编辑器未显示
【发布时间】:2013-03-13 11:15:30
【问题描述】:

我有一个显示联系人列表的 UITableViewController,当用户选择一行时,它会显示一个 UIActionSheet 来询问用户一个操作(呼叫、发送短信......)。

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

用户选择一个电话号码,这应该会显示 SMS 消息编写器。

问题是当用户选择电话号码时,消息编写器视图不显示(只是黑屏),并且我在 MFMessageComposeViewController 的 didFinishWithResult 中收到 MessageComposeResultCancelled。

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

如何正确调用和显示 SMS 消息编辑器?

(如果我在用户使用 didSelectRowAtIndexPath 选择列表中的一行时直接调用它,这将非常有效)

这里有一些代码:

1- 在 didSelectRowAtIndexPath 方法中调用第一个 UIActionSheet:

UIActionSheet *popupQuery;
...
[popupQuery showInView:self.view];

2- 在 clickedButtonAtIndex 方法中调用第二个 UIActionSheet:

UIActionSheet *popupQuery2;
...
[popupQuery showInView:self.view];

3- 从相同的方法,调用消息编写器:

[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];
    }
}

【问题讨论】:

  • 你能发布一些关于如何显示/关闭视图控制器的代码吗?从错误消息中可以看出,它们的呈现/关闭方式存在问题。
  • 这是在实际的 iDevice 上发生,还是刚刚在模拟器上测试过? canSendText 返回一个布尔值,指示当前设备是否能够发送文本消息。但是,canSendText 可能会在模拟器上返回 true,因为您可能在 Mac 上安装了消息应用程序(请参阅附加问题 mby.me/Gw
  • 我在 iphone 5 上测试

标签: ios uitableview uiactionsheet mfmessagecomposeview


【解决方案1】:

在这里找到解决方案:MFMessageComposeViewController shows blank/white screen

    controller.recipients = [NSArray arrayWithObject:theRecipients];

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

【讨论】:

    【解决方案2】:

    由于您不想尝试同时显示两个模态控件,请使用actionSheet:didDismissWithButtonIndex: 委托方法,以便在您开始显示消息控制器时隐藏操作表。

    以下代码显示了不会自动取消的作曲家。 只有当我按下Cancel 按钮时,我才能在日志中看到0,这是MessageComposeResultCancelled 的值。您是否尝试通过自动按下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];
    }
    

    【讨论】:

    • 事情是应用程序在调用消息编写器后收到“MessageComposeResultCancelled”
    • @dzk 当你显示来自actionSheet:didDismissWithButtonIndex: 的作曲家时会发生这种情况吗?
    • 是的,不是显示消息编辑器,而是显示像这样的空白屏幕img594.imageshack.us/img594/7624/screenshot20130302at931.png
    • @dzk 通过概念证明更新了答案。请分享您的委托方法。
    • 我使用的代码与 A-Live 的代码相似。不,我不是在尝试模拟发送操作。只显示消息编写器。有时在日志中我也有此消息:-init Error Domain=_UIViewServiceInterfaceErrorDomain Code=3“操作无法完成。(_UIViewServiceInterfaceErrorDomain 错误 3。)”-远程撰写控制器超时(否)!
    猜你喜欢
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多