0

我有一个 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];
    }
}
4

2 回答 2

1

在这里找到解决方案:MFMessageComposeViewController 显示空白/白屏

    controller.recipients = [NSArray arrayWithObject:theRecipients];

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

于 2013-03-18T15:41:49.360 回答
0

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

以下代码显示了不会自动取消的作曲家。只有当我按下 按钮时,我才能0在日志中看到 的值。你想通过自动按下按钮来破解吗?MessageComposeResultCancelledCancelsend

来自动作表委托的作曲家

MFMessageComposeViewController.h

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

我的视图控制器.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];
}
于 2013-03-13T13:16:44.580 回答