如何获取层次结构中的哪个视图?

时间:2016-09-28 20:25:03

标签: ios objective-c uiview uigesturerecognizer uiview-hierarchy

我有一个类型为MyUView的UIview V,它包含一个名为S1的stackView。 S堆栈包含一个名为NM的堆栈视图,它包含一个名为T的UITextField和另一个名为M的堆栈视图,其中包含一个名为L的UILabel。为了简单起见,我使用了字母来控制控件。

视图的层次结构如下:

  • V
    • S1
      • NM
        • Ť
        • 中号

我已将名为lprecognizer的LongPressGestureRecognizer添加到视图V,以便识别长按手势。我想在视图上检测longPress手势(以及可能的其他手势),但是,如果手势是长按手势,我只想在uitextfield T是被触摸的视图时执行特定操作。

我在MyUView中实现了以下委托方法:

{{1}}

这不起作用(即使我触摸文本字段)因为手势被识别为被触摸的视图是Stack S1,这是视图V的子视图数组中的第一个也是唯一一个视图(记住提到的层次结构)前)。

我的问题是:

如果有任何简单的方法可以知道某个感兴趣的视图(例如UITextField)是否在gicen touch区域内,即使这个感兴趣的视图在视图层次结构中很深?

我想避免以递归方式搜索视图层次结构的想法。

2 个答案:

答案 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 $@