我有一个类型为MyUView的UIview V,它包含一个名为S1的stackView。 S堆栈包含一个名为NM的堆栈视图,它包含一个名为T的UITextField和另一个名为M的堆栈视图,其中包含一个名为L的UILabel。为了简单起见,我使用了字母来控制控件。
视图的层次结构如下:
我已将名为lprecognizer的LongPressGestureRecognizer添加到视图V,以便识别长按手势。我想在视图上检测longPress手势(以及可能的其他手势),但是,如果手势是长按手势,我只想在uitextfield T是被触摸的视图时执行特定操作。
我在MyUView中实现了以下委托方法:
{{1}}
这不起作用(即使我触摸文本字段)因为手势被识别为被触摸的视图是Stack S1,这是视图V的子视图数组中的第一个也是唯一一个视图(记住提到的层次结构)前)。
我的问题是:
如果有任何简单的方法可以知道某个感兴趣的视图(例如UITextField)是否在gicen touch区域内,即使这个感兴趣的视图在视图层次结构中很深?
我想避免以递归方式搜索视图层次结构的想法。
答案 0 :(得分:0)
这样的事情应该有效:
UIView *hitView = [touch.view hitTest:[touch locationInView:touch.view] withEvent:nil];
if (hitView == T) {
// etc
}
答案 1 :(得分:0)
通过使用像这样的触摸点来识别其他方法
list.o: list.c list.h
$(CC) -c $(CFLAGS) $< -o $@
buf.o: buf.c buf.h
$(CC) -c $(CFLAGS) $< -o $@