UIGestureRecognizer知道它被调用的对象是什么?

时间:2012-04-24 05:48:54

标签: ios dynamic uigesturerecognizer

我有一个UIGestureRecognizer,我想在两个不同的UIView上工作,这两个UIView都在UiViewController的相同视图层次结构中。 UIGestureRecognizer的操作在每个上都是一样的,所以我希望调用相同的函数(很明显),我将在运行时告诉我正在处理哪些UIViews。但是怎么样?我看不出UIGestureRecognizer正在携带对象信息。我是否遗漏了文档中的那一行,或者gestureRecognizer不知道它被调用的是哪个对象?似乎语言的意义在于它会知道。

或许,也许我误解了班级的意图,我不应该:

UITapGestureRecognizer *dblTap = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
                                        action: @selector(handleDblTap:)];   
[viewA addGestureRecognizer: dblTap]; 
[viewB addGestureRecognizer: dblTap];

然后期望能够:

-(void)handleDblTap: (UIGestureRecognizer *)gestureRecognizer
{
     if (viewA)...

如果实际上UIGestureRecognizer不支持同时附加到多个对象,那么,如果你知道为什么它不支持这个,你能教育我吗?谢谢你的帮助。

3 个答案:

答案 0 :(得分:22)

标准是每个识别器一个视图。但是你仍然可以有效地使用一种处理程序方法。

你会像这样实例化识别器:

UITapGestureRecognizer *dblTapViewA = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDblTap:)];   
[viewA addGestureRecognizer: dblTapViewA]; 

UITapGestureRecognizer *dblTapViewB = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDblTap:)];
[viewB addGestureRecognizer: dblTapViewB];

然后你的处理程序方法看起来像:

-(void)handleDblTap:(UITapGestureRecognizer *)tapRec{
    if (tapRec.view == viewA){
        // double tap view a
    } else if (tapRec.view == viewB) {
        // double tap view b
    }
}

答案 1 :(得分:0)

您可以指定要查看的标记,然后只需比较该标记并执行操作。

UITapGestureRecognizer *dblTap = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
                                    action: @selector(handleDblTap:)];   
[view addGestureRecognizer: dblTap];
view.tag = 2000; // set any integer 

在打电话的时候

-(void)handleDblTap:(UITapGestureRecognizer *)tapRec{
    if (tapRec.view.tag == 2000){
      // double tap view with tag
    } 
}

答案 2 :(得分:-1)

UITapGestureRecognizer *dblTapA = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
                                    action: @selector(handleDblTap:)];   
[viewA addGestureRecognizer: dblTapA]; 

UITapGestureRecognizer *dblTapB = 
[[UITapGestureRecognizer alloc] initWithTarget: self 
                                    action: @selector(handleDblTap:)];   
[viewA addGestureRecognizer: dblTapB];