我有一个如下所示的场景
现在,我只显示一个带有标签8的视图。但我计划在HolderView中再添加3个这样的视图。
SmallerView / s是从其他Nib文件创建的。
我为ViewController的视图添加了Tap Recognizer的代码
UITapGestureRecognizer *tapRecognizer=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapRecognized2:)];
[tapRecognizer setDelegate:self];
[self.view addGestureRecognizer:tapRecognizer];
将Tap Recognizer添加到较小视图的代码 我在HolderView中添加了较小的视图。并为其分配了标签ID。之后,
for (SmallerView *view in HolderView.subviews) {
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)];
[recognizer setDelegate:self];
NSLog(@"Added gesture to the view with tag: %ld",view.tag);
[view addGestureRecognizer:recognizer];
}
3。 - (void)tapRecognized:(UITapGestureRecognizer *)paramSender { NSLog(@“tapped on%ld”,paramSender.view.tag); }
- (void)tapRecognized2:(UITapGestureRecognizer *)paramSender
{
NSLog(@"VC view");
}
现在的问题是...... 较小视图的Tap识别器实际上并不是一贯的。有时他们打印输出。突然间,它打印出ViewController的识别器输出。 请帮助
更新: 下面是我的View图。 绿色边框:(在UIView的initWithFrame中)d
self.layer.borderColor = [UIColor greenColor].CGColor;
红色边框:
MyTile *tile = [[[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:nil] objectAtIndex:0];
self.myLabel.layer.borderColor=[UIColor redColor].CGColor;
为什么绿色边界只有那么大?那不应该是完全正方形吗? 而且,只有当我点击绿色区域时,手势才有效。为什么?的
答案 0 :(得分:1)
似乎您在视图上有一个点击手势识别器,并且在其超级视图上还有一个点击手势识别器。手势识别器的工作方式是,默认情况下,两者将成为识别水龙头的候选者。如果那不是你想要的,那就由你来阻止。
你可以:
在手势识别器之间设置“you-go-first”关系,或者
您可以使用他们的代表帮助他们做出决定,或者
您可以设置子视图,以便停止超视图的手势识别器识别。
你有很多选择!
但是如果你不做任何一个,那么这个视图的手势识别器和它的superview的手势识别器都会试图识别。
答案 1 :(得分:0)
也许更好的解决方案就是将一个tapGestureRecognizer添加到父视图中。
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]init];
tap.numberOfTapsRequired = 1;
tap.numberOfTouchesRequired = 1;
[tap addTarget:self action:@selector(handleTap:)];
[holderView addGestureRecognizer:tap];
然后添加目标方法
- (void) handleTap:(UITapGestureRecognizer *)tap {
UIView * holderView;
CGPoint tapPoint = [tap locationInView:holderView];
for (UIView * v in holderView.subviews) {
if (CGRectContainsPoint(v.frame, tapPoint)) {
// v is the subview that was pressed.
// add your code here.
break;
}
}
}
答案 2 :(得分:0)
我为框架分配了一个新框架,边框错误。这有助于使手势正确。