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:短信编辑器未显示的主要内容,如果未能解决你的问题,请参考以下文章