2009-11-21 121 views
0

我有一个UIViewController,我已经添加了两个子视图到它的视图。一个子视图是UIViewController的视图。另一个子视图是UITextField。捕捉子视图触摸事件

当用户触摸另一个视图时,我需要关闭UITextField的键盘,但我无法弄清楚如何检测这些事件。 UIViewController的tableView捕获它们并打破UIResponder链,所以我的UIViewController从来没有听说过它们。我不想将层次结构中的所有东西都划分子类,以便我可以沿着链条传递事件,那么我的选择是什么?

我应该提到,我正在以编程方式做所有事情,没有IB。

谢谢你们。

回答

3

所以深入挖掘后,我认为没有其他办法。响应者链从接收到触摸事件的UIView开始,如果它未被捕获传递到该视图的控制器,然后传递到它的超级视图等等。

显然,在UITableView中对每个UIView元素进行子类化对于这种情况来说是疯狂的矫枉过正。

我所做的是创建一个透明的“触摸屏”视图,其框架尺寸与我的表格视图相同。当键盘扩展时,我在桌子上添加了这个视图,当它崩溃时,我将其删除。这允许我在他们碰到桌子之前拦截这些触摸。

+0

但你是如何设置视图来拦截触摸?当我这样做时,触动就会直通。 – jowie 2010-08-18 10:10:24

+0

@Joe Wibble - 您可能需要将UIView的userInteractionEnabled属性设置为“YES”。如果它被添加到表格视图中,并覆盖一些区域,它将拦截触摸。 – DougW 2010-08-18 18:25:09