iOS UIWebView键盘处理

让UIWebView弹出键盘上的按钮显示中文    http://www.cr173.com/html/19440_1.html

如果你有下面的问题,此文也许会帮到你。

  1. 键盘遮盖了UIWebView。
  2. 如何拖动UIWebView来移除键盘。
  3. 键盘出现时UIWebView里面的Content内容向上移动,以至聚焦的文本框超出了UIWebView的可视区域。
  4. 如何在键盘弹出时禁止UIWebView里面的Content向上移动。
  5. 无法在UIWebView中获取到坐标,来计算contentOffset得到想要展示的结果。

+-------------------------+

一步一步说明:

1. 唤出移除键盘

只要点击UIWebView里面的html文本框控件,会自动弹出键盘。当然你需要获取键盘的信息(高度等),方法还是使用UIViewController+Notification的方式,代码如下:

// UIKeyboardWillShowNotification和UIKeyboardWillHideNotification为键盘弹出或移除时iOS系统post notification的名字,这里只需要定义self为这个通知的接收者即可。
// viewWillAppear:和viewWillDisappear:大家应该都很清楚,这两个方法分别在self loadView和removefromsuperview后执行。
// 特别注意:这里的object参数需要是nil,不然取不到键盘的userInfo
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];  

}  

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}  

- (void)keyboardWillShow:(NSNotification *)notification {
    NSDictionary *userInfo = [notification userInfo];
    NSValue* value = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGRect keyboardRect = [value CGRectValue]; // 这里得到了键盘的frame
    // 你的操作,如键盘出现,控制视图上移等
}  

- (void)keyboardWillHide:(NSNotification *)notification {
    // 获取info同上面的方法
    // 你的操作,如键盘移除,控制视图还原等
}  

2. 通过拖动UIWebView来移除键盘

在网上看见很多人为了实现这个功能做了很多操作,但在iOS7中apple已为我们提供了这些,代码如下:

self.webView.scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; // 当拖动时移除键盘  

如果是iOS7以下,请参照 6 来设置,大概思路,先添加一个private的flag表明现在键盘是否存在,当存在时,通过 6 来获取事件关闭键盘。

3. 键盘遮盖了UIWebView

这个的解决方法可在 1 中的keyboardWillShow:里面操作,通过改变webView的origin来实现。

4. 键盘出现时UIWebView里面的Content内容向上移动,以至聚焦的文本框超出了UIWebView的可视区域

在UIWebView中,只要键盘出现,UIWebView肯定会向上移动,至于合不合适就不好说了,如果不合适,就只用禁用自动移动。

5. 如何在键盘弹出时禁止UIWebView里面的Content向上移动

这个方法,我也找了很久,但是还是找到了,感谢强大的网友,代码如下:

@interface XXX : UIViewController<UIScrollViewDelegate> // 添加UIScrollViewDelegate, step 1  

self.webView.scrollView.delegate = self; // 注册代理, step 2  

- (UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView{ // 实现代理方法, step 3
        return nil;
}  

6. 如何在UIWebView中获取点击坐标

众所周知,UIWebView会吃掉所有的touch事件,不然也不会有那么多人费工夫弄javascript了,但是不能设置不代表不能以另外一种方式代替,大概思路:给webView的superView添加手势,然后通过实现多手势过滤设置来实现,为什么要设置多手势过滤呢?我这里说明一下,由于UIWebView默认有自己的手势,它会拦截掉你的手势,以至 superView无法接收手势,代码如下:

@interface XXX : UIViewController<UIGestureRecognizerDelegate> // 添加UIGestureRecognizerDelegate, step 1  

// 添加手势, step 2
UITapGestureRecognizer *webTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(webTap:)];
webTap.numberOfTouchesRequired = 1;
webTap.numberOfTapsRequired = 1;
webTap.delegate = self;
webTap.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:webTap];  

// 设置过滤,ruturn YES为同时接收,至此手势可以透过webView,让你的superView也可以接收到了, step 3
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
        return YES;
}  

- (void)webTap:(UITapGestureRecognizer *)sender{
        CGPoint tapPoint = [sender locationInView:self.webView.scrollView]; // 获取相对于webView中的坐标,如果改成self.view则获取相对于superView中的坐标, step 4
        NSLog(@"tapPoint x:%f y:%f",tapPoint.x,tapPoint.y);
}  

UIWebView键盘处理能想起的就只有这些了,欢迎大家补充。

转自:http://www.open-open.com/lib/view/open1408609311366.html

时间: 2024-10-10 23:56:14

iOS UIWebView键盘处理的相关文章

iOS UIWebView键盘操控

+-------------------------+ 假设你有以下的问题,也许这篇文章将帮助你. 键盘遮盖了UIWebView. 怎样拖动UIWebView来移除键盘. 键盘出现时UIWebView里面的Content内容向上移动.以至聚焦的文本框超出了UIWebView的可视区域. 怎样在键盘弹出时禁止UIWebView里面的Content向上移动. 无法在UIWebView中获取到坐标,来计算contentOffset得到想要展示的结果. +------------------------

IOS: iPhone键盘通知与键盘定制

一.键盘通知 当文本View(如UITextField,UITextView,UIWebView内的输入框)进入编辑模式成为first responder时,系统会自动显示键盘.成为firstresponder可能由用户点击触发,也可向文本View发送becomeFirstResponder消息触发.当文本视图退出first responder时,键盘会消失.文本View退出first responder可能由用户点击键盘上的Done或Return键结束输入触发,也可向文本View发送resig

ios UIWebView 加载网页、文件、 html

UIWebView  是用来加载加载网页数据的一个框.UIWebView可以用来加载pdf word doc 等等文件 生成webview 有两种方法,1.通过storyboard 拖拽 2.通过alloc init 来初始化 创建webview,下列文本中 _webView.dataDetectorTypes = UIDataDetectorTypeAll; 是识别webview中的类型,例如 当webview中有电话号码,点击号码就能直接打电话 - (UIWebView *)webView

iOS UIWebView 加载https站点出现NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL,

今天在加载https站点的时候遇到如下的错误问题.所以对自己之前写的iOS内嵌webview做了一些修改,可以让它加载http站点也可以让它加载https站点. 下面是我加载https站点的时候出现的错误. error:     NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813) HTTPS 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protoc

iOS UIWebView 通过 cookie 完成自动登录验证

一些说明: 通过UIWebView登录后,会自动得到web服务器设置的cookie包括服务器中的seesionid. cookie不会自动保存在app里面,需要通过设置才能在下次启动app时获取. 自动登录,需要设置header,才能将cookie带给web服务器. 自动登录,需要web服务器端进行cookie验证方可登录. 实现流程: 1. 做好Sign in页面后,通过get或post递交表单给web服务器,可以通过下面的代码遍历得到的cookie. NSHTTPCookieStorage

关闭ios虚拟键盘的几种方法

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

iOS UIWebView截获html并修改便签内容

UIWebView使用中经常遇到用JS来处理的事情,今天又遇到了搜了搜,找了这篇文章 感觉不错 珍藏一下. 原文地址 http://jiapumin.iteye.com/blog/1558345    感谢原作者jiapumin 需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果: 方法:通过js截获UIWebView中的html,然后修改html标签内容: 实例代码: 服务器端html <html><head> <meta h

IOS UIWebView截获html并修改便签内容,宽度自适应

需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果:  方法:通过js截获UIWebView中的html,然后修改html标签内容:  实例代码:  服务器端html Java代码   <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="

iOS 收起键盘的几种方式

iOS 收起键盘的几种方式 1.一般的view上收起键盘 // 手势 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [self.cellphone resignFirstResponder]; [self.password resignFirstResponder]; } 2.tableView 上收起键盘 // 通过滚动收起 -(void)scrollViewDidScroll:(UIScrollView *