События 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",[]);
Другие вопросы по тегам