События showkeyboard/hidekeyboard не запускаются на ios 7 при открытии Soft Keyboard в phonegap
У меня есть очень простой фрагмент кода, чтобы попытаться вывести предупреждение, когда программная клавиатура открыта. Я просто пытаюсь установить, что этот жизнеспособный способ показать клавиатуру открыт.
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 3.1.0 с PG Build.
Изменить: я просто хочу подчеркнуть, что это для 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",[]);