2012-12-14 148 views
11

我正在使用Cordova 2.2 for IOS构建PhoneGap应用程序。当我调用一个本地obj-c插件来显示MFMessageComposeViewController时,我遇到了一些奇怪的行为。当显示MFMessageComposeViewController时,键盘显示立即隐藏自身

设置非常简单 - 我有一个连接到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的运行,消息编写叠加出现很大,与预填充我的价值观。而插入的XCode下面展示的短信界面图像显示正常:当我的iPhone是拔离我的Mac,和应用程序从跳板运行

enter image description here

,覆盖滑,键盘开始向上滑动,然后立即滑落 - 使其无法键入或发送消息。这是什么样子的时候没有连接到Mac/Xcode中 - 键盘开始滑动了,然后马上滑下(〜< 1秒)离开如下界面:

enter image description here

我不能为我的生活找出了当不从XCode运行时会导致键盘隐藏的东西,但是当它工作的时候很好地工作。

有什么办法'强制'键盘显示,或可能把整个modalviewcontroller作为第一响应者在某种形式或时尚?

任何建议表示赞赏!

编辑:

如果在接触面积

回答

3

单击您必须在头文件添加到MessageUI.framework Xcode项目,包括一个

#import <MessageUI/MessageUI.h>键盘将再次出现。

试试这个代码可能是其对你有帮助..

[self presentModalViewController:picker animated:YES]; 
//[self becomeFirstResponder];//try picker also instead of self 

也请参阅本教程波纹管还要检查演示..

  1. new-tutorial-developing-and-architecting-a-phonegap-application

  2. SMSComposer

我希望这会帮助你...

+0

@Evan试试这个答案并发表评论,如果有任何疑问..希望你得到它.. :) –

+0

@Evan使用本教程的家伙?也只是改变流量从viewcontroller导航控制器伙计... –

+1

我不认为他能够实例化一个MFMessageComposeViewController,如果他没有导入MessageUI框架... –

0

首先:最有可能是罪魁祸首,没有看到你的代码,是你的父(呈现)视图控制器可能会在其viewWillDisappear或中执行操作正在影响谁拥有“第一”响应者。这些方法在模态地呈现视图控制器时被调用。由于时序的关系,它在模拟器上的表现可能与设备不同 - ARM设备和i386处理器上的时序条件通常非常接近。

第二个:您的应用中的任何位置是否注册为UIKeyboardWillShowNotificationUIKeyboardDidShowNotification?如果是这样,请在作为结果调用的方法中放置断点 - 视图层次结构中的其他控制器可能会干扰这一点。

要回答你的问题......

有什么办法,以“力”来显示,或有可能把整个modalviewcontroller如以某种形式或时尚第一响应键盘?

否。使键盘显示的唯一方法是调用输入视图的becomeFirstResponder方法。由于Apple不公开文本视图,因此无法发送消息。将modalViewController设置为第一响应者将设置错误的对象。

+0

如果没有解决您的问题,张贴更多代码给我们看! –

+0

另外,你可以在这里看到这个代码 - https://github.com/grant/phonegap-plugins/commit/db93ea6db5eb38beddbda0d33975fbec63154cd6你发布的代码没有问题。 –

2

我遇到这些症状与煎茶触摸2.2和2.6.0科尔多瓦安装(具体的iOS 6+设备)。

问题出在Web框架窃取焦点远离本机SMS Composer模式,通常在第一个SMS Composer模式成功显示并关闭后发生。

A event.preventDefault()event.stopPropagation()一旦事件被调用(或在Sencha土地event.stopEvent())调用此解决方案。

希望这有助于

- 詹姆斯

+0

这是辉煌的侦探和工作解决方案。我可以确认它适用于iOS 6+上的Sencha Touch 2.2.0和Cordova 2.3.0。你是如何得出这个答案的?我甚至不知道如何解决它。 –