我有一个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不支持同时附加到多个对象,那么,如果你知道为什么它不支持这个,你能教育我吗?谢谢你的帮助。
答案 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];