Blame | Last modification | View Log | RSS feed
#import <objc/runtime.h>#import <UIKit/UIKit.h>#import "UIWebViewExtension.h"//Credit: https://gist.github.com/bjhomer/2048571//Also: http://stackoverflow.com/a/23398487/1091751@implementation UIWebView (HackishAccessoryHiding)static const char * const hackishFixClassName = "UIWebBrowserViewMinusAccessoryView";static Class hackishFixClass = Nil;- (UIView *)hackishlyFoundBrowserView {UIScrollView *scrollView = self.scrollView;UIView *browserView = nil;for (UIView *subview in scrollView.subviews) {if ([NSStringFromClass([subview class]) hasPrefix:@"UIWebBrowserView"]) {browserView = subview;break;}}return browserView;}- (id)methodReturningNil {return nil;}- (void)ensureHackishSubclassExistsOfBrowserViewClass:(Class)browserViewClass {if (!hackishFixClass) {Class newClass = objc_allocateClassPair(browserViewClass, hackishFixClassName, 0);IMP nilImp = [self methodForSelector:@selector(methodReturningNil)];class_addMethod(newClass, @selector(inputAccessoryView), nilImp, "@@:");objc_registerClassPair(newClass);hackishFixClass = newClass;}}- (BOOL) hackishlyHidesInputAccessoryView {UIView *browserView = [self hackishlyFoundBrowserView];return [browserView class] == hackishFixClass;}- (void) setHackishlyHidesInputAccessoryView:(BOOL)value {UIView *browserView = [self hackishlyFoundBrowserView];if (browserView == nil) {return;}[self ensureHackishSubclassExistsOfBrowserViewClass:[browserView class]];if (value) {object_setClass(browserView, hackishFixClass);}else {Class normalClass = objc_getClass("UIWebBrowserView");object_setClass(browserView, normalClass);}[browserView reloadInputViews];}/* ---------------------------------------------------------------- *//*- (UIKeyboardAppearance) darkKeyboardAppearanceTemplateMethod {return UIKeyboardAppearanceDark;}- (UIKeyboardAppearance) lightKeyboardAppearanceTemplateMethod {return UIKeyboardAppearanceLight;}- (BOOL) styleDark {UIView *browserView = [self hackishlyFoundBrowserView];if (browserView == nil) {return false;}Method m = class_getInstanceMethod( [self class], @selector( darkKeyboardAppearanceTemplateMethod ) );IMP imp = method_getImplementation( m );Method m2 = class_getInstanceMethod( [browserView class], @selector(keyboardAppearance) );IMP imp2 = method_getImplementation( m2 );return imp == imp2;}- (void) setStyleDark:(BOOL)styleDark {UIView *browserView = [self hackishlyFoundBrowserView];if (browserView == nil) {return;}if ( styleDark ) {Method m = class_getInstanceMethod( [self class], @selector( darkKeyboardAppearanceTemplateMethod ) );IMP imp = method_getImplementation( m );const char* typeEncoding = method_getTypeEncoding( m );class_replaceMethod( [browserView class], @selector(keyboardAppearance), imp, typeEncoding );}else {Method m = class_getInstanceMethod( [self class], @selector( lightKeyboardAppearanceTemplateMethod ) );IMP imp = method_getImplementation( m );const char* typeEncoding = method_getTypeEncoding( m );class_replaceMethod( [browserView class], @selector(keyboardAppearance), imp, typeEncoding );}}*/@end