【发布时间】:2013-03-12 19:36:20
【问题描述】:
我有一组这样分层的 UIView:
- 界面窗口
- UIViewController
- UIView(覆盖整个窗口;标签:41)
- UIView(标签:100(覆盖 UIView 的上半部分(标签:41))
- UIScrollView(下半部分;标签:126)
- UIView(涵盖 UIScrollView;标签:21)
- UIView (tag:22)
顶部的 UIView (tag:22) 是唯一一个我希望点击被识别的 UIView。使用 NSLog,标签总是引用 tag:41。
这是我在 ViewController 中的代码(-viewDidLoad 方法):
// Create and initialize a tap gesture
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
tap.numberOfTapsRequired = 1;
tap.numberOfTouchesRequired = 1;
[self.view addGestureRecognizer:tap];
这是处理tap的代码(也放在VC中)
- (void)singleTap:(UIGestureRecognizer*)gestureRecognizer {
CGPoint pt = [gestureRecognizer locationInView:self.view];
UIView *v = [self.view hitTest:pt withEvent:nil];
NSLog(@"\n\nx: %ld\ny: %ld\ntag: %d",(long)pt.x, (long)pt.y, self.view.tag);
if ([v isKindOfClass:[SubViewData class]]) {
NSLog(@"SubViewData!");
return;
}
}
阅读事件处理指南(第 32 页)我看到第一个视图落入点击区域的约束是获得命中测试的视图,在本例中为 tag:41。我需要 tag:22 来进行命中测试,因为在 tag:41 的上半部分还有另一个 UIView (tag:100),它也可以识别水龙头...
更新:我添加了处理点击的代码...有没有一种方法可以以编程方式拒绝点击,除非它是针对 UIVIew tag:22 的?
【问题讨论】:
-
您在哪个视图中添加了手势识别器?
-
添加到 viewController for tag:41... tag:22 没有它自己的 VC...(我想我应该提到 UIWindow 和 UIView 之间有一个带有标签的 VC: 41)
-
为什么不直接将手势识别器添加到相关视图中?
-
无法识别...放入 -viewDidLoad... 没有任何反应!
标签: ios objective-c uikit uigesturerecognizer