+-------------------------+javascript
假设你有如下的问题,也许这篇文章将帮助你。html
+-------------------------+java
仅仅要点击UIWebView里面的html文本框控件,会本身主动弹出键盘。web
固然你需要获取键盘的信息(高度等),方法仍是使用UIViewController+Notification的方式,代码例如如下:app
// 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同上面的方法 // 你的操做,如键盘移除。控制视图还原等 }
在网上看见很是多人为了实现这个功能作了很是多操做。但在iOS7中apple已为咱们提供了这些。代码例如如下:ssh
self.webView.scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag; // 当拖动时移除键盘
假设是iOS7下面,请參照 6 来设置,大概思路,先加入一个private的flag代表现在键盘是否存在,当存在时,经过 6 来获取事件关闭键盘。ide
在UIWebView中,仅仅要键盘出现。UIWebView确定会向上移动,至于合不合适就很差说了,假设不合适。就仅仅用禁用本身主动移动。post
这种方法。我也找了很是久。但是仍是找到了,感谢强大的网友,代码例如如下:ui
@interface XXX : UIViewController<UIScrollViewDelegate> // 加入UIScrollViewDelegate, step 1 self.webView.scrollView.delegate = self; // 注冊代理。 step 2 - (UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView{ // 实现代理方法, step 3 return nil; }
众所周知,UIWebView会吃掉所有的touch事件。否则也不会有那么多人费工夫弄javascript了,但是不能设置不表明不能以第二种方式取代。大概思路:给webView的superView加入手势,而后经过实现多手势过滤设置来实现。为何要设置多手势过滤呢?我这里说明一下,由于UIWebView默认有本身的手势,它会拦截掉你的手势,以致superView没法接收手势。代码例如如下:spa
@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); }
BB:转载请注明出处 http://blog.csdn.net/assholeu/article/details/38714123