iOS UIWebView键盘处理
让UIWebView弹出键盘上的按钮显示中文 http://www.cr173.com/html/19440_1.html
如果你有下面的问题,此文也许会帮到你。
- 键盘遮盖了UIWebView。
- 如何拖动UIWebView来移除键盘。
- 键盘出现时UIWebView里面的Content内容向上移动,以至聚焦的文本框超出了UIWebView的可视区域。
- 如何在键盘弹出时禁止UIWebView里面的Content向上移动。
- 无法在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 = ;
webTap.numberOfTapsRequired = ;
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
iOS UIWebView键盘处理的更多相关文章
- iOS UIWebView键盘操控
+-------------------------+ 假设你有以下的问题,也许这篇文章将帮助你. 键盘遮盖了UIWebView. 怎样拖动UIWebView来移除键盘. 键盘出现时UIWebView ...
- 【iOS自定义键盘及键盘切换】详解
[iOS自定义键盘]详解 实现效果展示: 一.实现的协议方法代码 #import <UIKit/UIKit.h> //创建自定义键盘协议 @protocol XFG_KeyBoardDel ...
- iOS 收起键盘的几种方式
iOS 收起键盘的几种方式 1.一般的view上收起键盘 // 手势 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ ...
- ios 自定义键盘
由于项目需要,需要自定义键盘.ios系统键盘会缓存键盘输入,并保存在系统目录下的文件里,并且是明文存储,存在帐号密码泄漏风险.在别人代码基础上修改了下,美化了下界面,去掉了字符输入,加了点击特效,截图 ...
- IOS 回收键盘通用代码
感觉IOS的键盘回收好累,所以封装了一个通用一点的方法 -(IBAction)spbResignFirstResponder:(id)sender { // NSLogObj(sender); if ...
- ios UIWebView截获html并修改便签内容(转载)
ios UIWebView截获html并修改便签内容 博客分类: iphone开发iphone开发phoneGap uiwebviewstringByEvaluatingJavaScriptFromS ...
- IOS UIWebView截获html并修改便签内容,宽度自适应
需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果: 方法:通过js截获UIWebView中的html,然后修改html标签内容: 实例代码: 服 ...
- ios UIWebView截获html并修改便签内容
需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果: 方法:通过js截获UIWebView中的html,然后修改html标签内容: 实例代码: 服务器端 ...
- iOS学习——键盘弹出遮挡输入框问题解决方案
在iOS或Android等移动端开发过程中,经常遇到很多需要我们输入信息的情况,例如登录时要输入账号密码.查询时要输入查询信息.注册或申请时需要填写一些信息等都是通过我们键盘来进行输入的,在iOS开发 ...
随机推荐
- 如何高效利用github提升自己
作为开源代码库以及版本控制系统,Github拥有超过900万开发者用户,是开发者打开程序开源大门的一扇窗口,也是开发者快速提升自己的一个重要途径.本文将从两个方面介绍github的使用方式. 和逛微博 ...
- Unity插件之NGUI学习(4)—— 创建UI2DSprite动画
创建一个新的Scene.并按 Unity插件之NGUI学习(2)创建UI Root,并在UI Root的Camera下创建一个Panel. 然后在选中Panel,在菜单中选择NGUI->Crea ...
- js中级系列三:前端性能优化
原文链接:http://www.cnblogs.com/xxcanghai/p/5205998.html 链接:http://www.zhihu.com/question/21658448/answe ...
- MFC 点击按钮,弹出另一个对话框(模态及非模态对话框)
1. 模态对话框 资源视图->Dialog->右键->添加资源->新建->对话框->右键->添加类. 例如:在A_dialog中点击按钮弹出B_dialog ...
- Trees in a Wood. UVA 10214 欧拉函数或者容斥定理 给定a,b求 |x|<=a, |y|<=b这个范围内的所有整点不包括原点都种一棵树。求出你站在原点向四周看到的树的数量/总的树的数量的值。
/** 题目:Trees in a Wood. UVA 10214 链接:https://vjudge.net/problem/UVA-10214 题意:给定a,b求 |x|<=a, |y|&l ...
- 【Mac + Appium】之运行报错:[UiAutomator] UiAutomator exited unexpectedly with code 0, signal null
产生下面的原因是因为:与uiautomator2的weditor冲突,两者不能同时使用. 有时打开appium时会报错: [UiAutomator] UiAutomator exited unexpe ...
- 手机端 html 页面
<!doctype html> <html> <meta charset="utf-8"> <meta name="viewpo ...
- 目前国际上所用云计算平台IaaS、PaaS、SaaS简介
随着云计算这个概念越来越为人所熟知,企业对云计算的重视程度也在日趋加深.这不仅是一种潮流,更体现了一种需求——数字化.现代化.科技化的整体需求.如今市场上云计算的运营商更是风起云涌,服务种类更是丰富繁 ...
- flex datagrid itemrender wordwrap失效
现在我是想把datagrid中的部分字体变个颜色. 但是重写set data函数后发现原先的wordwrap自动换行不好使了. 于是就在谷歌上找问题.. 参考了两篇: http://stackover ...
- ASP.NET动态网站制作(30)-- WEBService
前言:继续讲正则表达式,然后介绍一下webservice. 内容: 1.匹配QQ号的正则表达式:^[1-9]\d{4,10}$:匹配手机号的正则表达式:^(0|86)?(13|14|15|18)[0- ...