我有一个 MyUView 类型的 UIview V,其中包含一个名为 S1 的 stackView。S 堆栈包含一个名为 NM 的堆栈视图,其中包含一个名为 T 的 UITextField 和另一个名为 M 的堆栈视图,其包含一个名为 L 的 UILabel。为了简单起见,我使用字母来命名控件。
视图的层次结构如下:
- 五
- S1
- 纳米
- 吨
- 米
- 大号
- 纳米
- S1
为了识别长按手势,我在视图 V 中添加了一个名为 lprecognizer 的 LongPressGestureRecognizer。我想要在视图上检测 longPress 手势(以及可能的其他手势),但是,如果手势是 longpress 手势,我只想在 uitextfield T 是触摸视图时才执行特定操作。
我在 MyUView 中实现了以下委托方法:
- (Bool) gestureRecognizer: (UIGestureRecognizer*) gesturerecognizer shouldreceiveTouch: (UITouch*) touch {
if (gestureRecognizer == lprecognizer)
{
if (touch.view == T) return YES;
else return NO;
}
else return YES;
}
这不起作用(即使我触摸了文本字段),因为识别为被触摸手势的视图是 Stack S1,它是视图 V 的子视图数组中的第一个也是唯一一个视图(请记住前面提到的层次结构)。
我的问题是:
如果有任何简单的方法可以知道某个感兴趣的视图(例如 UITextField)是否在 gicen 触摸区域中,即使这个感兴趣的视图在视图层次结构中很深?
我想避免递归搜索视图层次结构的想法。