44
55@implementation IonicKeyboard
66
7- // @synthesize hideKeyboardAccessoryBar = _hideKeyboardAccessoryBar;
7+ @synthesize hideKeyboardAccessoryBar = _hideKeyboardAccessoryBar;
88@synthesize disableScroll = _disableScroll;
99//@synthesize styleDark = _styleDark;
1010
1111- (void)pluginInitialize {
1212
13- NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
14- __weak IonicKeyboard* weakSelf = self;
15-
13+ Class wkClass = NSClassFromString([@[@"UI", @"Web", @"Browser", @"View"] componentsJoinedByString:@""]);
14+ wkMethod = class_getInstanceMethod(wkClass, @selector(inputAccessoryView));
15+ wkOriginalImp = method_getImplementation(wkMethod);
16+ Class uiClass = NSClassFromString([@[@"WK", @"Content", @"View"] componentsJoinedByString:@""]);
17+ uiMethod = class_getInstanceMethod(uiClass, @selector(inputAccessoryView));
18+ uiOriginalImp = method_getImplementation(uiMethod);
19+ nilImp = imp_implementationWithBlock(^(id _s) {
20+ return nil;
21+ });
22+
1623 //set defaults
17- // self.hideKeyboardAccessoryBar = YES;
24+ self.hideKeyboardAccessoryBar = YES;
1825 self.disableScroll = NO;
1926 //self.styleDark = NO;
20-
27+
28+ NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
29+ __weak IonicKeyboard* weakSelf = self;
2130 _keyboardShowObserver = [nc addObserverForName:UIKeyboardWillShowNotification
2231 object:nil
2332 queue:[NSOperationQueue mainQueue]
@@ -42,6 +51,7 @@ - (void)pluginInitialize {
4251 [weakSelf.commandDelegate evalJs:@"cordova.fireWindowEvent('native.hidekeyboard'); "];
4352 }];
4453}
54+
4555- (BOOL)disableScroll {
4656 return _disableScroll;
4757}
@@ -62,24 +72,28 @@ - (void)setDisableScroll:(BOOL)disableScroll {
6272 _disableScroll = disableScroll;
6373}
6474
75+ //keyboard swizzling inspired by:
76+ //https://github.com/cjpearson/cordova-plugin-keyboard/
77+
78+ - (BOOL)hideKeyboardAccessoryBar {
79+ return _hideKeyboardAccessoryBar;
80+ }
6581
66- // - (BOOL)hideKeyboardAccessoryBar {
67- // return _hideKeyboardAccessoryBar;
68- // }
69- //
70- // - (void)setHideKeyboardAccessoryBar:(BOOL)hideKeyboardAccessoryBar {
71- // if (hideKeyboardAccessoryBar == _hideKeyboardAccessoryBar || ![self.webView isKindOfClass:[UIWebView class]]) {
72- // return;
73- // }
74- // if (hideKeyboardAccessoryBar) {
75- // ((UIWebView*)self.webView).hackishlyHidesInputAccessoryView = YES;
76- // }
77- // else {
78- // ((UIWebView*)self.webView).hackishlyHidesInputAccessoryView = NO;
79- // }
80- //
81- // _hideKeyboardAccessoryBar = hideKeyboardAccessoryBar;
82- // }
82+ - (void)setHideKeyboardAccessoryBar:(BOOL)hideKeyboardAccessoryBar {
83+ if (hideKeyboardAccessoryBar == _hideKeyboardAccessoryBar) {
84+ return;
85+ }
86+
87+ if (hideKeyboardAccessoryBar) {
88+ method_setImplementation(wkMethod, nilImp);
89+ method_setImplementation(uiMethod, nilImp);
90+ } else {
91+ method_setImplementation(wkMethod, wkOriginalImp);
92+ method_setImplementation(uiMethod, uiOriginalImp);
93+ }
94+
95+ _hideKeyboardAccessoryBar = hideKeyboardAccessoryBar;
96+ }
8397
8498/*
8599- (BOOL)styleDark {
@@ -129,15 +143,15 @@ - (void) disableScroll:(CDVInvokedUrlCommand*)command {
129143 }
130144}
131145
132- // - (void) hideKeyboardAccessoryBar:(CDVInvokedUrlCommand*)command {
133- // if (!command.arguments || ![command.arguments count]){
134- // return;
135- // }
136- // id value = [command.arguments objectAtIndex:0];
137- // if (value != [NSNull null]) {
138- // self.hideKeyboardAccessoryBar = [value boolValue];
139- // }
140- // }
146+ - (void) hideKeyboardAccessoryBar:(CDVInvokedUrlCommand*)command {
147+ if (!command.arguments || ![command.arguments count]){
148+ return;
149+ }
150+ id value = [command.arguments objectAtIndex:0];
151+ if (value != [NSNull null]) {
152+ self.hideKeyboardAccessoryBar = [value boolValue];
153+ }
154+ }
141155
142156- (void) close:(CDVInvokedUrlCommand*)command {
143157 [self.webView endEditing:YES];
0 commit comments