我有一个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不支持同时附加到多个对象,那么,如果你知道为什么它不支持这个,你能教育我吗?谢谢您的帮助.
解决方法
标准是每个识别器一个视图.但您仍然可以有效地使用一种处理程序方法.
你会像这样实例化识别器:
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 } }