zyl910

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

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  215 随笔 :: 0 文章 :: 145 评论 :: 111万 阅读
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

作者: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   zyl910  阅读(2799)  评论(1编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示