iOS 8 jquery mobile 1.4.4 клавиатура ввода больше не скрывает нижний колонтитул
iOS 8 jquery mobile 1.4 cordova 3.6.3 любой симулятор, любое физическое реальное устройство
проблема заключается в скрытии нижнего колонтитула, когда клавиатура появляется для ввода в поля формы
предыдущее решение работало довольно хорошо на iOS7 и теперь выглядит хорошо, когда вы нажимаете на элемент ввода, однако если вы прокручиваете форму, нижний колонтитул появляется (фиксируется на странице), перекрывая некоторые другие поля ввода.
1 ответ
Решение найдено!
IOS
необходимо отредактировать CDVNotification.m и CDVNotification.h в папке src плагина org.apache.cordova.dialogs, как описано здесь: добавить свойства и методы в CDVnotification
Так как было не ясно, куда помещать новые строки, это новый код в CDVnotification.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioServices.h>
#import <Cordova/CDVPlugin.h>
@interface CDVNotification : CDVPlugin <UIAlertViewDelegate>{}
@property (strong) NSString* keyboardShowcallbackId;
@property (strong) NSString* keyboardHidecallbackId;
- (void)alert:(CDVInvokedUrlCommand*)command;
- (void)confirm:(CDVInvokedUrlCommand*)command;
- (void)prompt:(CDVInvokedUrlCommand*)command;
- (void)beep:(CDVInvokedUrlCommand*)command;
- (void)keyboardShow:(CDVInvokedUrlCommand*)command;
- (void)keyboardHide:(CDVInvokedUrlCommand*)command;
@end
@interface CDVAlertView : UIAlertView {}
@property (nonatomic, copy) NSString* callbackId;
@end
тогда вот где я вставил новые строки в CDVNotification.m
- (void)beep:(CDVInvokedUrlCommand*)command
{
NSNumber* count = [command.arguments objectAtIndex:0 withDefault:[NSNumber numberWithInt:1]];
playBeep([count intValue]);
}
//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];
}
}
@end
@implementation CDVAlertView
@synthesize callbackId;
@end
затем найдите в вашем приложении cordova/phonegap событие ondeviceready и вставьте две строки cordova.exec.
onDeviceReady: function() {
app.receivedEvent('deviceready');
navigator.splashscreen.hide();
}, // fine onDeviceReady
receivedEvent: function(id) {
console.log('Received Event: ' + id);
if (isMobile.iOS()) {
alert("this is iOS"); //
cordova.exec(function(){ $("#footer").hide(); },function(){console.log("error");},"Notification","keyboardShow",[]);
cordova.exec(function(){ $("#footer").show(); },function(){console.log("error");},"Notification","keyboardHide",[]);
} else {
alert("this is android");
document.addEventListener("showkeyboard", function(){ $("#footer").hide(); }, false);
document.addEventListener("hidekeyboard", function(){ $("#footer").show(); }, false);
}
}
Android
предыдущее решение, js-код вставки, который определяет изменение размера окна при появлении виртуальной клавиатуры css, все еще работает в Android
<script type="text/javascript">
document.write( '<style>#footer{visibility:hidden}@media(min-height:' + ($( window ).height() - 10) + 'px){#footer{visibility:visible}}</style>' );
</script>
Однако я выбрал
document.addEventListener("showkeyboard", function(){ $("#footer").hide(); }, false);
document.addEventListener("hidekeyboard", function(){ $("#footer").show(); }, false);
если устройство Android.
Надеюсь, это поможет кому-то вроде меня бороться с этим с одного месяца:)!!