在 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 应用程序中以编程方式在 iPhone 上显示软键盘?
[Cordova/Phonegap] Cordova iOS 应用在第三方输入法的键盘弹出(点击输入框)时,页面不上移,导致输入框被键盘遮挡 的解决办法