在WKWebView中隐藏键盘附件栏

Max*_*s S 5 xcode uiwebview ios wkwebview

如何在WKWebview中隐藏键盘附件栏?虽然UIWebView有一些资源,但我还是找不到Stackoverflow上的WkWebview.

有关:

  1. 删除UIWebView键盘上的附件项
  2. iOS 7 UIWebView键盘问题

Jus*_*ael 11

这是可能WKWebView与混写出来的方法的变体inputAccessoryViewUIWebView.

首先,添加这个小类:

@interface _NoInputAccessoryView : NSObject

@end

@implementation _NoInputAccessoryView

- (id)inputAccessoryView {
    return nil;
}

@end
Run Code Online (Sandbox Code Playgroud)

接下来,添加此方法:

- (void)removeInputAccessoryViewFromWKWebView:(WKWebView *)webView {
    UIView *targetView;

    for (UIView *view in webView.scrollView.subviews) {
        if([[view.class description] hasPrefix:@"WKContent"]) {
            targetView = view;
        }
    }

    if (!targetView) {
        return;
    }

    NSString *noInputAccessoryViewClassName = [NSString stringWithFormat:@"%@_NoInputAccessoryView", targetView.class.superclass];
    Class newClass = NSClassFromString(noInputAccessoryViewClassName);

    if(newClass == nil) {
        newClass = objc_allocateClassPair(targetView.class, [noInputAccessoryViewClassName cStringUsingEncoding:NSASCIIStringEncoding], 0);
        if(!newClass) {
            return;
        }

        Method method = class_getInstanceMethod([_NoInputAccessoryView class], @selector(inputAccessoryView));

        class_addMethod(newClass, @selector(inputAccessoryView), method_getImplementation(method), method_getTypeEncoding(method));

        objc_registerClassPair(newClass);
    }

    object_setClass(targetView, newClass);
}
Run Code Online (Sandbox Code Playgroud)

然后,您所要做的就是调用该方法并传入您的WKWebView:

[self removeInputAccessoryViewFromWKWebView:webView];
Run Code Online (Sandbox Code Playgroud)

注意:我还不确定这是否会通过应用程序审核,但它与我用过的代码非常相似UIWebView,并且确实通过了审核.

更新:此代码位于已通过App Store审核的应用中.

  • 这个答案的Swift版本:http://stackoverflow.com/questions/33853924/removing-wkwebview-accesory-bar-in-swift/33939584#33939584 (2认同)
  • 这是基于我在这里的回答:/sf/answers/1332959561/ 希望能提供参考。 (2认同)