iOS去除Webview键盘顶部工具栏的方法

前言

在默认情况下,iOS 使用 Webview 打开的网页,在进行表单输入时,弹出的键盘顶部会多出一个工具栏。

左边有两个上下按钮,右边有一个Done/完成按钮。这是用来切换输入框的,就像 PC 上按Tab键可以切换输入框一样。

为了让 App 中嵌入的 H5 更接近 Native,咱们可以去掉它。

UIWebView

UIWebView,可以使用[self hideKeyboardShortcutBar:self.webView]去掉工具栏。

- (void) hideKeyboardShortcutBar: (UIView *)view

{

for (UIView *sub in view.subviews) {

[self hideKeyboardShortcutBar:sub];

if ([NSStringFromClass([sub class]) isEqualToString:@"UIWebBrowserView"]) {

Method method = class_getInstanceMethod(sub.class, @selector(inputAccessoryView));

IMP newImp = imp_implementationWithBlock(^(id _s) {

if ([sub respondsToSelector:@selector(inputAssistantItem)]) {

UITextInputAssistantItem *inputAssistantItem = [sub inputAssistantItem];

inputAssistantItem.leadingBarButtonGroups = @[];

inputAssistantItem.trailingBarButtonGroups = @[];

}

return nil;

});

method_setImplementation(method, newImp);

}

}

}

WkWebView

WkWebView,可以使用[self hideWKWebviewKeyboardShortcutBar:self.webView]去掉工具栏。

// 步骤一:创建一个 _NoInputAccessoryView

@interface _NoInputAccessoryView : NSObject

@end

@implementation _NoInputAccessoryView

- (id)inputAccessoryView {

return nil;

}

@end

// 步骤二:去掉 WkWebviewe Done 工具栏

- (void) hideWKWebviewKeyboardShortcutBar:(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);

}

总结

以上是 iOS去除Webview键盘顶部工具栏的方法 的全部内容, 来源链接: utcz.com/z/346259.html

回到顶部