我有一个UIViewController,我在其视图中添加了两个子视图。一个子视图是UIViewController的视图。另一个子视图是UITextField。
当用户触摸另一个视图时,我需要关闭UITextField的键盘,但我无法弄清楚如何检测这些事件。 UIViewController的tableView捕获它们并打破UIResponder链,所以我的UIViewController永远不会听到它们。我不想将层次结构中的所有内容子类化,因此我可以将事件沿着链传递,那么我的选择是什么?
我应该提一下,我正在以编程方式执行所有操作,而不是IB。
谢谢你们。
答案 0 :(得分:3)
所以在深入研究之后,我认为没有其他办法。响应者链从接收到触摸事件的UIView开始,如果没有捕获,则传递给该视图的控制器,然后传递到其超级视图等等。
显然,在UITableView中继承每个UIView元素对于这种情况来说是疯狂的过度杀伤。
我所做的是创建一个透明的“触摸屏”视图,其框架尺寸与我的表视图相同。当键盘扩展时,我将这个视图添加到我的表上,当它折叠时我将其删除。这允许我在他们到达桌面之前拦截这些触摸。