iOS去除Webview键盘顶部工具栏的方法
程序员文章站
2024-02-06 12:08:58
前言
在默认情况下,ios 使用 webview 打开的网页,在进行表单输入时,弹出的键盘顶部会多出一个工具栏。
左边有两个上下按钮,右边有一个done/完成按钮。...
前言
在默认情况下,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); }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。