父视图框架事件外的子视图

时间:2009-10-30 08:23:15

标签: iphone objective-c cocoa-touch uiview

我正在以编程方式将UIView B添加到另一个UIView A。

A帧是{{0,372},{320,44}}。 B UIView在{0,-74}添加,宽度为{320,74}。

我的问题是没有处理B触摸事件。

更精确的触摸事件被处理到UIView的兄弟UITableView,即使在UITableView上显示B UIview,也会在{0,372}处结束。

有任何解决方案吗?

3 个答案:

答案 0 :(得分:3)

为了确定触摸事件所处的视图,Cocoa遍历视图层次结构(并向每个子视图发送hitTest:withEvent:消息。反过来,此消息本身调用pointInside:withEvent:,返回一个布尔值value,指示视图是否包含指定的点。

据推测,您可以将UIView A子类化并覆盖其pointInside:withEvent:方法,以便在A的边界之外但在B之内的点返回YES。

答案 1 :(得分:1)

好的,你的B-UIView完全超出了A-UIView的范围。如果在“界面”构建器中使用相同的框架设置两个通用视图,并将背景设置为不同的颜色,您将完全看不到B-UIView。 alt text http://img256.imageshack.us/img256/6789/screenshot20091030at350.png

这就像定义一个框架在屏幕边界之外的视图一样。如果没有任何部分是可见的,它将不会捕获触摸,因为它在未定义的空间中关闭,茶具有负平方根。

UITableView正在处理命中,因为B UIView根本不在响应链中。

你需要让B-UIView成为A-View的兄弟,而不是看不见的非活动子视图。然后将其覆盖在UITableView的底部。

答案 2 :(得分:0)

你不能这样做。您应该将A和B视图添加到另一个视图C.它会起作用。