首页 > 系统 > iOS > 正文

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

2020-07-26 02:19:48
字体:
来源:转载
供稿:网友

前言

在默认情况下,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);}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对武林网的支持。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表