• [iOS] UIScrollView与软键盘配合心得——点击空白处隐藏软键盘(完美方案,不增代码)


    作者: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 同设为一个稍大的数值,即扩大内容的高度,使下面留有足够的空白用于显示软键盘。这样虽然不够精致,但也能解决遮挡问题。



  • 相关阅读:
    Ajax:创建提示工具
    Ajax:自动刷新
    Ajax:动态加载列表框
    The Elements of C# Style Packaging
    Ajax:读取响应首部
    Ajax:发送请求与处理响应
    XMLHttpRequest对象
    WPF学习:XAML概述
    Ajax:进度条
    Ajax:数据验证
  • 原文地址:https://www.cnblogs.com/zyl910/p/ios_scrollview_keyboard_spacehide.html
Copyright © 2020-2023  润新知