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);
}

总结

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

(0)

相关推荐

  • iOS开发中WebView的基本使用方法简介

    1.使用UIWebView加载网页 运行XCode 4.3,新建一个Single View Application,命名为WebViewDemo. 2.加载WebView 在ViewController.h添加WebView成员变量和在ViewController.m添加实现 复制代码 代码如下: #import <UIKit/UIKit.h> @interface ViewController : UIViewController {     UIWebView *webView; } @e

  • 详解iOS webview加载时序和缓存问题总结

    iOS webView的加载时序 UIWebView加载顺序: - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSLog(@"开始请求webview:%@",request.URL.relativeString); return YES; } -

  • iOS Webview自适应实际内容高度的4种方法详解

    //第一种方法 - (void)webViewDidFinishLoad:(UIWebView *)webView { CGFloat webViewHeight=[webView.scrollView contentSize].height; CGRect newFrame = webView.frame; newFrame.size.height = webViewHeight; webView.frame = newFrame; _webTablewView.contentSize = C

  • 轻松理解iOS 11中webview的视口

    iOS 11在状态栏区域带来了一些新的,也许是不直观的行为,这对使用Apache Cordova或Ionic等工具的开发人员尤为重要.尤其是这种行为变化会影响到任何基于Web的应用程序,这些应用程序在进行iOS 11构建时使用fixed定位标题栏.此文章可帮助您了解iOS 11中的Webview视口. 注意:现有应用程序将继续工作,因为它们始终可以对其视口行为进行更改.这只会影响使用Xcode 9和iOS 11的目标编译的应用程序. 要了解这些变化,我们需要看看它的历史. 状态栏与安全区 在早起

  • ios开发加载webview显示进度条实例

    很多APP加载webView页面的时候都有进度条显示,今天我们这里主要使用相对轻量级的WKWebView加载网页,至于WKWebView 和UIWebView的区别与联系这里就不多讲了,自己百度哈哈... WKWebView加载网页进度跳显示主要效果如下: 这里主要是使用KVO监听WKWebView的"estimatedProgress"属性,通过监听该属性的变化才是进度条的长度. 1.定义便利构造函数.以及属性和控件 var url: String? var progresslaye

  • iOS获取cell中webview的内容尺寸

    最近项目中遇到在cell中获取webView的内容的尺寸的需求 实现的思路其实很简单 就是通过执行js 获取尺寸即可 为了后面用着方便我直接封装了一个HTML的cell 起名就叫 STHTMLBaseCell 下面是实现代码: #import "STBaseTableViewCell.h"@class STHTMLBaseCell; @protocol STHtmlBaseDelegate <NSObject> - (void)webViewDidLoad:(STHTMLB

  • iOS 对当前webView进行截屏的方法

    UIWebView和WKWebView的截屏有所区别: UIWebView: func getImage(context: ServiceExecuteContext) -> UIImage { //创建一个基于位图的图形上下文并指定大小 UIGraphicsBeginImageContextWithOptions(context.fromViewController.webView.bounds.size, true, 0) //renderInContext呈现接受者及其子范围到指定的上下文

  • IOS中UIWebView加载Loading的实现方法

    第一种方法:使用UIView and UIActivityIndicatorView 复制代码 代码如下: //创建UIWebView WebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 44, 320, 400)]; [WebView setUserInteractionEnabled:NO]; [WebView setBackgroundColor:[UIColor clearColor]]; [WebView setDelega

  • IOS中的webView加载HTML

    在日常开发中,我们为了效率会用到很多很多的WebView,比如在做某个明细页面的时候我们返回给你的可能是一个html字符串,我们就需要将当前字符串展示到webView上面,所以我们对HTML标签需要有一定的认识,下面我们来一起用html标签和JS写一个打地鼠游戏,这里我们主要讲解HTML标签的书写,只要如何和webView适配涉及到响应式布局我们下次讲解: 1.首先我们先新建一个html文件 2 完整html标签并且设置编码格式为UTF-8 3 在body里面增加十只老鼠图片,并且增加点击事件,

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

    前言 在默认情况下,iOS 使用 Webview 打开的网页,在进行表单输入时,弹出的键盘顶部会多出一个工具栏. 左边有两个上下按钮,右边有一个Done/完成按钮.这是用来切换输入框的,就像 PC 上按Tab键可以切换输入框一样. 为了让 App 中嵌入的 H5 更接近 Native,咱们可以去掉它. UIWebView UIWebView,可以使用[self hideKeyboardShortcutBar:self.webView]去掉工具栏. - (void) hideKeyboardSho

  • iOS让软键盘消失的简单方法

    一些文本输入控件等待输入时会弹出软键盘,我们可以设置这些控件的Did End On Exit之类的回调方法以在用户点击软键盘上的done或return之列的按键时收起键盘. 不过某些时候有些键盘没有上述的按键,或者我们希望点击App视图的背景时使软键盘收起来,无论当时软键盘是否打开. 一种办法是拖动一个按钮到View上,然后使其大小和View相同,然后设置点击该按钮的回调. but,我们还可以有更简单的方法. 我们知道UIView本身没什么Action,不过它的子类UIControl却有不少,所

  • iOS中表情键盘的完整实现方法详解

    前言 最近在公司做了个表情键盘的需求,这个需求的技术难度不会很大,比较偏向业务.但是要把用户体验做的好也是不容易的,其中有几个点需要特别注意.话不多说,下面开始正文(注:本文对应的Demo放在Github上:https://github.com/VernonVan/PPStickerKeyboard (本地上传) ). 市面上的表情键盘的分析 首先来看一下市面上主要的几个APP上的表情键盘,平时使用的时候不会去关注细节,这次特意去使用了表情键盘,发现各个APP的体验还是有优有劣的. 首先是QQ和

  • IOS开发中键盘输入屏幕上移的解决方法

    在IOS开法中经常会遇到键盘遮挡屏幕的事情(比如输入账号密码验证码等等),就使得原本都不大的屏幕直接占了一半甚至更多的位置,这倒无所谓,关键是挡住了下面的按钮.这样的话按钮的事件也就触发不了,最好的解决办法就是当输入这些信息的时候让整个屏幕上移一个键盘的位置,或者上移到指定的位置. 首先一般输入的话都用的是UITextField,所以要监听用户什么时候开始输入和什么时候结束输入,直接设置代理代理就行了,要遵受 UITextFieldDelegate协议. //遵循协议 @interface Vi

  • iOS关闭虚拟键盘方法汇总

    在iOS应用开发中,有三类视图对象会打开虚拟键盘,进行输入操作,但如何关闭虚拟键盘,却没有提供自动化的方法.这个需要我们自己去实现.这三类视图对象分别是UITextField,UITextView和UISearchBar. 这里介绍一下UITextField中关闭虚拟键盘的几种方法. 第一种方法,使用它的委托UITextFieldDelegate中的方法textFieldShouldReturn:来关闭虚拟键盘. 在UITextField视图对象如birdNameInput所在的类中实现这个方法

  • 详解IOS点击空白处隐藏键盘的几种方法介绍

    IOS7 点击空白处隐藏键盘的几种方法,具体如下: iOS开发中经常要用到输入框,默认情况下点击输入框就会弹出键盘,但是必须要实现输入框return的委托方法才能取消键盘的显示,对于用户体验来说很不友好,我们可以实现点击键盘以外的空白区域来将键盘隐藏,以下我总结出了几种隐藏键盘的方法: 首先说明两种可以让键盘隐藏的Method: 1.[view endEditing:YES]  这个方法可以让整个view取消第一响应者,从而让所有控件的键盘隐藏. 2.[textFiled resignFirst

  • 去除IOS苹果手机自带按钮样式的方法(推荐)

    如下所示: input[type="button"], input[type="submit"], input[type="reset"] { -webkit-appearance: none; } textarea { -webkit-appearance: none;} 添加到css格式的文件中! 以上这篇去除IOS苹果手机自带按钮样式的方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • iOS应用中使用Toolbar工具栏方式切换视图的方法详解

    关于UIToolbar ToolBar工具栏是视图View的属性,可以在工具栏上添加工具栏按钮Bar Button Item(可以是自定义的Custom.也可以是系统自带的BarButtonSystemItem ),视图控制器可以通过工具栏项对视图中内容进行操作. 注意事项: 在导航栏控制器中会有一个UIToolBar实例,但默认是隐藏的,如果需要显示,需要通过这个方法将其打开: 在这里需要注意的是,与UINavigationBar类似,导航控制器拥有且只拥有一个UIToolBar实例,但UIT

  • iOS项目开发键盘弹出遮挡输入框问题解决方案

    在iOS或Android等移动端开发过程中,经常遇到很多需要我们输入信息的情况,例如登录时要输入账号密码.查询时要输入查询信息.注册或申请时需要填写一些信息等都是通过我们键盘来进行输入的,在iOS开发过程中,一般用于进行输入信息的有两类:UITextField和UITextView,前者是单行输入文本框,后者是可滑动的多行输入文本框,在这整个开发过程中,我们需要控制键盘的弹出和收起.在输入结束的时候获取输入的信息,此外,我们还需要保证在键盘弹起的时候不遮挡我们输入的文本框.今天,我们就主要来说一

随机推荐