ios:短信编辑器未显示

Posted

技术标签:

【中文标题】ios:短信编辑器未显示【英文标题】:ios : sms message composer not showing 【发布时间】: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 上测试 【参考方案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。)”-远程撰写控制器超时(否)!

以上是关于ios:短信编辑器未显示的主要内容,如果未能解决你的问题,请参考以下文章

XCode 4 - 设备未显示在架构“目标”下拉列表中

限免推荐|Ai编译器奶盖短信休闲小游戏合集等,共 5 款

primeng 文本编辑器图标和标签未显示

此文件未显示在编辑器中

使用 typescript-eslint 在 VSCode 编辑器中未显示 Typescript 错误

TinyMCE 编辑器未在 JQuery UI 对话框中显示