Ios 子视图下面的子视图不调用手势识别器功能

Ios 子视图下面的子视图不调用手势识别器功能,ios,objective-c,ipad,uiview,uitapgesturerecognizer,Ios,Objective C,Ipad,Uiview,Uitapgesturerecognizer,我有两个UIView添加到ViewController中,使用uitagesturerecognizer。它们的帧发生冲突(假设它们相等以便更容易理解),当我单击UIView时,我想为两个视图触发识别器功能,而不仅仅是最后添加为子视图的一个视图。有办法吗 用于创建UIView和手势的代码: UIView *a = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 50, 50)]; UITapGestureRecognizer *aa = [[UITap

我有两个
UIView
添加到
ViewController
中,使用
uitagesturerecognizer
。它们的帧发生冲突(假设它们相等以便更容易理解),当我单击
UIView
时,我想为两个视图触发识别器功能,而不仅仅是最后添加为子视图的一个视图。有办法吗

用于创建UIView和手势的代码:

UIView *a = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 50, 50)];
UITapGestureRecognizer *aa =
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDeviceClick:)];
[a addGestureRecognizer:aa];
[self.view addSubview:a];
UIView *b = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 50, 50)];
UITapGestureRecognizer *bb =
[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDeviceClick:)];
[b addGestureRecognizer:bb];
[self.view addSubview:b];
和功能:

-(void)handleDeviceClick:(UITapGestureRecognizer*)recognizer{
    NSLog(@"device click occured");
}
UIgestureRecognitizerDelegate
已添加到我的头文件中

请尝试以下操作:

// second view is called
// handleDeviceClick1: action of second view
// handleDeviceClick0: action of first view

-(void)handleDeviceClick1:(UITapGestureRecognizer*)recognizer{
   // call first view 
   [self handleDeviceClick0:recognizer] 
}

那你为什么不用呢

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = touches.anyObject;
    CGPoint point = [touch locationInView:self.view];
您只需检查单击的点是否在每个
子视图中


您不必创建两个
uitappirations
,如果希望它们只使用一种方法,一个就足够了

您是否也向头文件中添加了
UIgestureRecognitizerDelegate

@interface ViewController <UIGestureRecognizerDelegate>
@界面视图控制器

对于手势识别器,您应该将
取消触摸视图
设置为
,否则,检测触摸的第一个识别器将阻止第二个识别器执行此操作:

aa.cancelsTouchesInView = NO;
bb.cancelsTouchesInView = NO;
(实际上,您只需要对与顶子视图关联的手势识别器执行此操作,但如果您的视图层次结构可能会发生变化,最好同时在这两个视图上执行此操作)

请在以下网页中阅读:

取消图切辛视图

一个布尔值,影响识别手势时是否将触摸传递到视图

@属性(非原子)BOOL cancelsTouchesInView

讨论

当此属性为“是”(默认值)且接收者识别其手势时,该手势的待处理触摸将不会传递到视图,而先前传递的触摸将通过发送到视图的touchesCancelled:withEvent:消息取消。如果手势识别器无法识别其手势,或者如果此属性的值为“否”,则视图将接收多点触摸序列中的所有触摸


我确实在头文件中添加了委托。方法被触发,但只针对视图B,而不是首先添加的视图A。我真正的问题是,我有多个视图,而不仅仅是2个,并且数字不是静态数字,因此我可以创建已知数量的点击手势函数。我只需要创建一个函数,并为所有与单击的视图发生框架冲突的子视图多次调用它。是否希望:单击最后一个视图,剩余视图位于最后一个视图的下方?是否设置了某些属性?我认为,您创建的NSArray包含所有需要设置属性的视图。当点击“最后一个视图”时,您可以查看所有视图并设置属性。可以吗?我在ViewController中创建了多个矩形。当我单击后面有矩形的矩形时,我只希望这两个矩形更改一些属性值。并非视图控制器中的所有矩形。所有视图都存储在可变数组中。我认为可以使用NSArray或NSDictionary。最后一个视图的标签是10(array.count)。该视图位于最后一个视图的后面(array.count-1)。:)