在 phonegap 中打开软键盘时,未在 ios 7 上触发 showkeyboard/hidekeyboard 事件

Posted

技术标签:

【中文标题】在 phonegap 中打开软键盘时,未在 ios 7 上触发 showkeyboard/hidekeyboard 事件【英文标题】:showkeyboard/hidekeyboard events not firing on ios 7 when opening the Soft Keyboard in phonegap 【发布时间】:2014-01-21 11:52:25 【问题描述】:

我有一段非常简单的代码,试图在软键盘打开时发出警报。我只是想确定这是一种显示键盘的可行方法是打开的。

document.addEventListener('deviceready', function () 
    $.app.deviceReady();

    document.addEventListener("showkeyboard", function() alert("Keyboard is ON");, false);
    document.addEventListener("hidekeyboard", function() alert("Keyboard is OFF");, false);
, false);

这些事件永远不会在 ios 上触发。只有安卓。我确实曾经看到有一个插件可以在 IO7 上帮助解决这个问题,但我现在根本找不到它。

我正在使用带有 PG Build 的 PG 3.1.0。

编辑:我只想强调这是针对 Phonegap Build 的,这意味着据我所知,我不会使用任何自定义插件。只有这里列出的那些:https://build.phonegap.com/plugins

【问题讨论】:

【参考方案1】:

我也遇到了同样的问题。没有可用的插件。最后,我为 iOS 添加了新的插件方法。

在您的应用程序上添加 CDVNotification 插件并添加以下方法和属性。

CDVNotification.h

@property (strong) NSString* keyboardShowcallbackId;
@property (strong) NSString* keyboardHidecallbackId;

- (void)keyboardShow:(CDVInvokedUrlCommand*)command;
- (void)keyboardHide:(CDVInvokedUrlCommand*)command;

CDVNotification.m

//Keyboard notifications.
- (void)keyboardShow:(CDVInvokedUrlCommand*)command 

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];

self.keyboardShowcallbackId = command.callbackId;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardShowCallback:)
                                             name:UIKeyboardWillShowNotification object:nil];

- (void)keyboardHide:(CDVInvokedUrlCommand*)command 
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];

self.keyboardHidecallbackId = command.callbackId;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardHideCallback:)
                                             name:UIKeyboardWillHideNotification object:nil];


- (void)keyBoardHideCallback:(NSNotification*)notification 
     if (self.keyboardHidecallbackId) 
       CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
    [result setKeepCallbackAsBool:YES];

       [self.commandDelegate sendPluginResult:result callbackId:self.keyboardHidecallbackId];
     
  

- (void)keyBoardShowCallback:(NSNotification*)notification  
     if (self.keyboardShowcallbackId) 
        CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];

        [result setKeepCallbackAsBool:YES];
        [self.commandDelegate sendPluginResult:result callbackId:self.keyboardShowcallbackId];
     

您可以使用以下代码在打开和隐藏键盘时获取回调。

 cordova.exec(function()alert("Keyboard is ON");,function()alert("error");,"Notification","keyboardShow",[]);

 cordova.exec(function()alert("keyboard is OFF");,function()alert("error");,"Notification","keyboardHide",[]);

【讨论】:

感谢我在使用 Phonegap 构建时所做的努力。这意味着我不能使用任何不在 PGB 平台中的插件。我知道这很烦人,但我目前在这件事上别无选择。

以上是关于在 phonegap 中打开软键盘时,未在 ios 7 上触发 showkeyboard/hidekeyboard 事件的主要内容,如果未能解决你的问题,请参考以下文章

当软键盘出现在phonegap中时隐藏输入字段

Phonegap:显示键盘时布局中断

在 PhoneGap 应用程序中以编程方式在 iPhone 上显示软键盘?

[Cordova/Phonegap] Cordova iOS 应用在第三方输入法的键盘弹出(点击输入框)时,页面不上移,导致输入框被键盘遮挡 的解决办法

打开软键盘时在顶部隐藏半个对话框

Cordova/Phonegap 3.1 键盘(仍然)覆盖焦点表单字段 - iOS 7