我正在使用适用于 IOS 的 Cordova 2.2 构建一个 PhoneGap 应用程序。在调用我编写的用于显示 MFMessageComposeViewController 的 native obj-c 插件时,我遇到了一些奇怪的行为。
设置非常简单 - 我有一个附加到 UI 元素的点击事件,当按下时,将调用我的 PhoneGap 插件,传递一个数字和一条文本消息,然后显示带有参数的 MFMessageComposeViewController预填充。
我的 javascript 看起来像这样:
$(document).bind('deviceready', function(){
$(".theButton").tap(function(){
cordova.exec(function(){}, function() {}, "PhoneGapSms", "SendSms", [db.getItem("profile_sms"), db.getItem("profile_emergency")]);
});
});
我的 obj-c 代码如下所示:
- (void)SendSms:(CDVInvokedUrlCommand*)command
{
CDVInvokedUrlCommand* myCommand = command;
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
NSString* body = [command.arguments objectAtIndex:0];
NSString* toRecipientsString = [command.arguments objectAtIndex:1];
if(body != nil)
picker.body = body;
if(toRecipientsString != nil)
[picker setRecipients:[ toRecipientsString componentsSeparatedByString:@","]];
picker.messageComposeDelegate = self;
[self.viewController presentModalViewController:picker animated:YES];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
[picker release];
}
所以,总而言之,非常简单的事情。
我的问题是:
当我的 iPhone 插入我的 Mac 并且该应用程序从 XCode 运行时,Message Composer 叠加层看起来很棒,我的值已预先填充。下图演示了 SMS 界面在插入 XCode 时显示良好:
当我的 iPhone 从我的 Mac 上拔下,应用程序从跳板运行时,Overlay 向上滑动,键盘开始向上滑动,然后立即向下滑动 strong> - 无法输入或发送消息。这是未连接到 Mac/Xcode 时的样子 - 键盘开始向上滑动然后立即向下滑动(~ < 1 秒),留下以下界面:
我这辈子都想不出是什么导致键盘在不从 XCode 运行时隐藏,但在它运行时却运行良好。
有没有办法“强制”键盘显示,或者可能以某种形式或方式将整个 modalviewcontroller 作为第一响应者?
如有任何建议,我们将不胜感激!
编辑:
如果您点击接触区域,键盘将再次出现
最佳答案
您必须添加 MessageUI.framework
到您的 Xcode 项目并包含一个
#import <MessageUI/MessageUI.h>
在你的头文件中。
试试这个代码可能对你有帮助..
[self presentModalViewController:picker animated:YES];
//[self becomeFirstResponder];//try picker also instead of self
另请参阅下面的教程并检查演示..
希望对你有帮助...
关于iphone - 键盘显示然后在显示 MFMessageComposeViewController 时立即隐藏自己,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13884672/