我正在使用 Cordova 2.2 for IOS 构建一个 PhoneGap 应用程序。在调用我编写的用于显示 MFMessageComposeViewController 的本机 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 覆盖看起来很棒,我的值已预先填充。下图展示了插入 XCode 时 SMS 界面看起来很好:
当我的 iPhone从我的 Mac 上拔下,并且应用程序从弹簧板运行时,覆盖层向上滑动,键盘开始向上滑动,然后立即向下滑动- 使得无法输入或发送消息。这是未连接到 Mac/Xcode 时的样子 - 键盘开始向上滑动然后立即向下滑动(~ < 1 秒),留下以下界面:
我一生都无法弄清楚当不从 XCode 运行时会导致键盘隐藏的原因,但是当它运行时可以很好地工作。
有没有办法“强制”键盘显示,或者可能以某种形式或方式将整个 modalviewcontroller 作为第一响应者?
任何建议表示赞赏!
编辑:
如果您单击联系人区域,键盘将再次出现