ios:sms消息生成器未显示
我有一个UITableViewController,它显示联系人列表,当用户选择一行时,它将显示一个UIActionSheet,要求用户执行操作(呼叫、发送短信…) 用户选择一个动作,第一个UIActionSheet将显示另一个包含电话号码的UIActionSheet 用户选择一个电话号码,这将显示SMS消息生成器 问题是,当用户选择电话号码时,message composer视图不会显示(只是一个黑屏),我会在MFMessageComposeViewController的didFinishWithResult中收到MessageComposeSultCancelled 这将生成此警告“警告:在演示或取消过程中尝试从视图控制器取消!” 如何正确调用并显示SMS消息生成器 (如果在用户使用didSelectRowAtIndexPath选择列表中的一行时直接调用它,则此操作非常有效) 下面是一些代码: 1-调用DidSelectRowatineXpath方法中的第一个UIActionSheet:ios:sms消息生成器未显示,ios,uitableview,uiactionsheet,mfmessagecomposeview,Ios,Uitableview,Uiactionsheet,Mfmessagecomposeview,我有一个UITableViewController,它显示联系人列表,当用户选择一行时,它将显示一个UIActionSheet,要求用户执行操作(呼叫、发送短信…) 用户选择一个动作,第一个UIActionSheet将显示另一个包含电话号码的UIActionSheet 用户选择一个电话号码,这将显示SMS消息生成器 问题是,当用户选择电话号码时,message composer视图不会显示(只是一个黑屏),我会在MFMessageComposeViewController的didFinishWi
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.)”-远程编写控制器超时(否)!