From 9b0ff0c0f5cfc5672941ffaa9664b35bb2920bee Mon Sep 17 00:00:00 2001 From: Mark Shust Date: Wed, 16 Mar 2016 15:45:10 -0400 Subject: [PATCH] hideKeyboardAccessoryBar not working with WKWebView #151 credit to https://github.com/cjpearson/cordova-plugin-keyboard/blob/master/src/ios/CDVKeyboard.m --- src/ios/IonicKeyboard.m | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/ios/IonicKeyboard.m b/src/ios/IonicKeyboard.m index 0111d85..2d11491 100644 --- a/src/ios/IonicKeyboard.m +++ b/src/ios/IonicKeyboard.m @@ -1,6 +1,7 @@ #import "IonicKeyboard.h" #import "UIWebViewExtension.h" #import +#import @implementation IonicKeyboard @@ -67,15 +68,30 @@ - (BOOL)hideKeyboardAccessoryBar { return _hideKeyboardAccessoryBar; } +static IMP UIOriginalImp; +static IMP WKOriginalImp; + - (void)setHideKeyboardAccessoryBar:(BOOL)hideKeyboardAccessoryBar { - if (hideKeyboardAccessoryBar == _hideKeyboardAccessoryBar || ![self.webView isKindOfClass:[UIWebView class]]) { + if (hideKeyboardAccessoryBar == _hideKeyboardAccessoryBar) { return; } + + Method UIMethod = class_getInstanceMethod(NSClassFromString(@"UIWebBrowserView"), @selector(inputAccessoryView)); + Method WKMethod = class_getInstanceMethod(NSClassFromString(@"WKContentView"), @selector(inputAccessoryView)); + if (hideKeyboardAccessoryBar) { - ((UIWebView*)self.webView).hackishlyHidesInputAccessoryView = YES; - } - else { - ((UIWebView*)self.webView).hackishlyHidesInputAccessoryView = NO; + UIOriginalImp = method_getImplementation(UIMethod); + WKOriginalImp = method_getImplementation(WKMethod); + + IMP newImp = imp_implementationWithBlock(^(id _s) { + return nil; + }); + + method_setImplementation(UIMethod, newImp); + method_setImplementation(WKMethod, newImp); + } else { + method_setImplementation(UIMethod, UIOriginalImp); + method_setImplementation(WKMethod, WKOriginalImp); } _hideKeyboardAccessoryBar = hideKeyboardAccessoryBar;