2

我在 iOS8 中使用 MFMessageComposeViewController 遇到了一个奇怪的错误,它只能在我自己的应用程序中重现。它现在正在影响 App Store 中的应用程序,使用在 iOS8 上运行的 iOS7 SDK 构建,以及在我自己的测试设备(iPhone 和 iPad)中使用 iOS8 SDK

问题是,当我调出 MFMessageComposeViewController 时,它向我显示了没有文本字段或发送按钮的控制器。我没有在 iOS7 和 iOS8 之间更改我的代码,所以不知道为什么会这样。代码本身非常简单:

MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = self;
[picker setRecipients: @[@"5551112222"]];
[picker setBody: @"Test"];

[self presentViewController:picker animated:YES completion: ^{
    NSLog(@"MFMessageComposeViewController completion handler"); 
}];

这是它的样子:

在此处输入图像描述

关于我可以尝试什么解决方法的任何想法?我尝试在完成处理程序中设置 textField 和接收者;尝试在最顶层的视图控制器上调用 becomeFirstResponder;没运气。同样,这在 iOS7 中运行良好。

编辑:

MFMessageComposeViewController所以我从这个链接中找到了苹果自己的示例代码: https ://developer.apple.com/library/ios/samplecode/MessageComposer/Listings/MessageComposerViewController_m.html

当我构建并运行这个应用程序时,它会MFMessageComposeViewController完美显示,并且预先填写电话号码和文本字段也可以。但是当我将他们的文件复制到我的应用程序中时,将他们的故事板作为我的主要故事板,按下“撰写短信”按钮,我看到了同样的问题!

这里发生了什么?很困惑。可能是我自己的应用程序中的某些配置阻止了消息编写器正确显示吗?

4

1 回答 1

2

最后,在拆除了我的大部分应用程序之后,我能够找出问题所在。事实证明,我在一个类别中覆盖了 UIViewController 系统方法(而不是子类化):

@implementation UIViewController (UIViewController_Additions)
-(BOOL)canBecomeFirstResponder {
    return YES;
}

这在 iOS7 之前一直运行良好,但在 iOS8 和 `MFMessageComposeViewController. “4岁小白来咬你屁股”的案例

苹果也不鼓励这种做法,根据这个链接(虽然我找不到原始的苹果来源):https ://stackoverflow.com/a/14259595/145552

于 2014-09-23T23:12:53.587 回答