UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTapTap:)];
[self.view1 addGestureRecognizer:tapGesture];
[self.view2 addGestureRecognizer:tapGesture];
[tapGesture release];

在上面的代码中,只能识别view2上的点击。如果我注释掉第三行,那么点击view1会被识别。如果我是对的,你只能使用手势识别器一次,我不确定这是一个错误还是它只是需要一些更多的文档。


当前回答

不,你不应该将手势识别器附加到多个视图。

苹果文档中有这样明确的信息:

手势识别器附加到视图 每个手势识别器都与一个视图相关联。相比之下,a 视图可以有多个手势识别器,因为一个视图 可能会对许多不同的手势做出反应。对于一个手势识别器 标识在特定视图中出现的触摸,必须附加 那个视图的手势识别器。

事件处理指南iOS手势识别器苹果开发者库

正如其他人提到的那样,它们在某些情况下可能会起作用,但这显然违背了文档,并且可能会在未来的任何iOS版本中更改。

你所能做的就是向你想要监视的视图添加单独的手势识别器,它们可以共享一个共同的动作。

其他回答

不,你不应该将手势识别器附加到多个视图。

苹果文档中有这样明确的信息:

手势识别器附加到视图 每个手势识别器都与一个视图相关联。相比之下,a 视图可以有多个手势识别器,因为一个视图 可能会对许多不同的手势做出反应。对于一个手势识别器 标识在特定视图中出现的触摸,必须附加 那个视图的手势识别器。

事件处理指南iOS手势识别器苹果开发者库

正如其他人提到的那样,它们在某些情况下可能会起作用,但这显然违背了文档,并且可能会在未来的任何iOS版本中更改。

你所能做的就是向你想要监视的视图添加单独的手势识别器,它们可以共享一个共同的动作。

我们可以做一些像这样的事情,这很简单

1)在控制器中创建如下函数(此函数将返回GestureRecognizer)

-(UITapGestureRecognizer*)setRecognizer{
     UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(openProfile)];
     [gestureRecognizer setNumberOfTapsRequired:1];
     return gestureRecognizer;
}

2)现在在多个视图中设置这个识别器

[self.view1 addGestureRecognizer:[self setRecognizer]]; 
[self.view2 addGestureRecognizer:[self setRecognizer]];

好吧,如果有人不想代码添加手势视图的多个按钮像kwalker已经回答上面,并想通过接口生成器这样做,这可能会帮助你。

1)你可以从对象库中添加长按手势识别器,就像你添加其他对象,如UIButtons和UILabels。

最初我只用了一个

2)设置引用出口到UIButton和发送动作与文件的所有者。

注意:如果你有多个UIButton或任何其他对象,你将需要单独的手势识别器为他们每一个。详情请参考我的这个问题。长按手势识别器上的UIButton标签错误

我使用下面的方法来解决这个问题。

for (UIButton *aButton in myButtons) {

            UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
            longPress.minimumPressDuration=1.0;
            [aButton addGestureRecognizer:longPress];
            [longPress release];

}

然后在我的handleLongPress方法中,我只是设置一个UIButton等于手势识别器的视图,并根据该按钮分支我所做的事情

- (void)handleLongPress:(UILongPressGestureRecognizer*)gesture {
    if ( gesture.state == UIGestureRecognizerStateEnded ) {
        UIButton *whichButton=(UIButton *)[gesture view];
        selectedButton=(UIButton *)[gesture view];
    ....
}

如果你有固定的视角,我建议你这样做

[self.view1 addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTapTap:)]];
[self.view2 addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTapTap:)]];

这样可以减少多个不同的无用变量