zyl910

优化技巧、硬件体系、图像处理、图形学、游戏编程、国际化与文本信息处理。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

作者:zyl910

  “点击空白处隐藏软键盘”是一个很常见的功能。最简单的实现办法是将背景View设为为UIControl类,然后在Touch Down事件中隐藏软键盘。详见 http://www.cnblogs.com/zyl910/archive/2013/03/29/ios_textfield_keyboard.html
  但是当文本框放在UIScrollView控件中时,上述方法就失效了。UIScrollView本身没有提供触摸事件,但它会拦截触摸操作,使背景View无法收到触摸事件。
  该怎么办呢?

  曾在网络上找到过一个解决方案——写UIScrollView的派生类,提供触摸事件。该方案存在不少缺点,如代码复杂、触摸事件容易与UIScrollView的拖曳滚动功能冲突。实用性不高。

  今天我突然想到了完美的解决方案。只需在界面中多加一个控件,不需增加代码,可沿用原来“View中点击空白处隐藏软键盘”的代码。而且隐藏软键盘操作不会与UIScrollView的拖曳滚动功能冲突。哈哈,厉害吧!

  前面吹嘘了那么多,其实解决方案十分简单,类似脑经急转弯。
  具体办法——
1. 在UIScrollView中放一个View。
2. 在该View中放置各种控件。
3. 将该View的类名改为UIControl,处理Touch Down 事件关闭软键盘。

  本来我担心UIScrollView上面的View会拦截触摸事件,使UIScrollView不能正常拖曳滚动。但运行后发现效果完美。
  这是因为UIScrollView优先抢占了触摸事件,当它判断不是拖曳滚动时,才会放弃对触摸事件的抢占,使它上面的View接收到触摸事件。

  其次关于关闭软键盘,我找了更简单的代码——

- (IBAction)view_TouchDown:(id)sender {
    [self.view endEditing:YES];
}

 

  最后是关于软键盘遮挡问题的处理心得。
  当软键盘显示时,UIScrollView不会自动缩小到非软键盘区域,导致下半部分被遮挡、无法操作。
  对于这个问题,常规办法是接收软键盘显示/隐藏通知,然后人工计算非软键盘区域的尺寸,再设置UIScrollView的位置。该方法不仅代码复杂,而且难以适应横屏模式及有很多控件的情况。
  我是这样处理的——将UIScrollView的Content Insets Bottom 与 View的Height 同设为一个稍大的数值,即扩大内容的高度,使下面留有足够的空白用于显示软键盘。这样虽然不够精致,但也能解决遮挡问题。



posted on 2013-04-17 19:03  zyl910  阅读(2767)  评论(1编辑  收藏  举报