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

假设你有以下的问题,也许这篇文章将帮助你。

  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键盘处理能想起的就仅仅有这些了,欢迎大家补充。

BB:转载请注明出处 http://blog.csdn.net/assholeu/article/details/38714123


资料參考:
感谢 http://blog.csdn.net/abel_tu/article/details/12134261

iOS UIWebView键盘操控的更多相关文章

  1. iOS UIWebView键盘处理

    让UIWebView弹出键盘上的按钮显示中文    http://www.cr173.com/html/19440_1.html 如果你有下面的问题,此文也许会帮到你. 键盘遮盖了UIWebView. ...

  2. 【iOS自定义键盘及键盘切换】详解

    [iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...

  3. iOS 收起键盘的几种方式

    iOS 收起键盘的几种方式 1.一般的view上收起键盘 // 手势 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ ...

  4. ios 自定义键盘

    由于项目需要,需要自定义键盘.ios系统键盘会缓存键盘输入,并保存在系统目录下的文件里,并且是明文存储,存在帐号密码泄漏风险.在别人代码基础上修改了下,美化了下界面,去掉了字符输入,加了点击特效,截图 ...

  5. IOS 回收键盘通用代码

    感觉IOS的键盘回收好累,所以封装了一个通用一点的方法 -(IBAction)spbResignFirstResponder:(id)sender { // NSLogObj(sender); if ...

  6. ios UIWebView截获html并修改便签内容(转载)

    ios UIWebView截获html并修改便签内容 博客分类: iphone开发iphone开发phoneGap uiwebviewstringByEvaluatingJavaScriptFromS ...

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

    需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果:  方法:通过js截获UIWebView中的html,然后修改html标签内容:  实例代码:  服 ...

  8. ios UIWebView截获html并修改便签内容

    需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果: 方法:通过js截获UIWebView中的html,然后修改html标签内容: 实例代码: 服务器端 ...

  9. iOS学习——键盘弹出遮挡输入框问题解决方案

    在iOS或Android等移动端开发过程中,经常遇到很多需要我们输入信息的情况,例如登录时要输入账号密码.查询时要输入查询信息.注册或申请时需要填写一些信息等都是通过我们键盘来进行输入的,在iOS开发 ...

随机推荐

  1. folat i = 0.1; 警告

    今天的用途  float i = 0.1;那么编译器警告实际: #include <iostream> using namespace std; int main() { float k ...

  2. C和指针 (pointers on C)——第三章——数据

    第三章 数据 本章是非常重要的,在特定范围内使用.链接属性.存储类型.const.extern和statickeyword使用.几乎所有的公司是C++在采访的第一个问题. 总结: 具有external ...

  3. Linux核心设计依据(七)系统调用

    我理解的系统调用,用户进程和内核是内核提供了一个接口进行交互.除了异常和下降外.内核系统调用是唯一合法入境.像/proc还通过系统调用访问. 系统调用的意义: 让用户进程受限地訪问硬件设备 为用户空间 ...

  4. .NET系统开发过程中积累的扩展方法

    分享.NET系统开发过程中积累的扩展方法   .NET 3.5提供的扩展方法特性,可以在不修改原类型代码的情况下扩展它的功能.下面分享的这些扩展方法大部分来自于Code Project或是Stacko ...

  5. SQL随着子查询结果更新多个字段

    笔者:iamlasong 要求:表格内容需要改变,在临时表中内容的变化,使用SQL官方声明更新表若干领域. 假设更新一个字段,直接用字段名=子查询就能够了,多个字段更新,将字段在括号里并列写出就可以, ...

  6. 三个水杯 (bfs)

    给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算.现在要求你写出一个程序,使其输出使初始状态到达目标状态的 ...

  7. VAXVOIP SDK Licensekey

    Insert the following key to the SDK with SetLicenseKey call: VAXVOIP.COM-191P238P55P253P97P229P51P76 ...

  8. MongoDB详解学习历程

    MongoDB是一个基于分布式文件存储的数据库,它是介于关系数据库和非关系数据库之间的产品. MongoDB支持的数据结构非常松散,类似json的bjson格式,因此可以存储比较复杂的数据类型.Mon ...

  9. 前端学习笔记(zepto或jquery)——对li标签的相关操作(五)

    对li标签的相关操作——has与find的差异性 demo代码: <ul> <li><p>1</p></li> <li>2< ...

  10. 深度解析javascript中的浅复制和深复制

    原文:深度解析javascript中的浅复制和深复制 在谈javascript的浅复制和深复制之前,我们有必要在来讨论下js的数据类型.我们都知道有Number,Boolean,String,Null ...