作者: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 同设为一个稍大的数值,即扩大内容的高度,使下面留有足够的空白用于显示软键盘。这样虽然不够精致,但也能解决遮挡问题。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库