2013-07-28 78 views
2

我想在视图中一起使用水龙头手势和长按手势。但我的问题是,我无法在水龙头上运行轻按手势操作。但长按手势工作正常。水龙头手势+长按手势都没有在一起工作

这里是代码片段。

  UILongPressGestureRecognizer *longPressGesture=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(ontappLongPressGesture:)]; 
      longPressGesture.minimumPressDuration=0.6; 

      longPressGesture.delegate=self; 
      [cell.view addGestureRecognizer:longPressGesture]; 

      UITapGestureRecognizer *gesture=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellSelected:)]; 
      //[gesture requireGestureRecognizerToFail:longPressGesture]; //I have tried with this line also but not working 
      gesture.delegate=self; 
      [cell.view addGestureRecognizer:gesture]; 

而且我已委托方法也

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
return YES; 
} 

这种方法获取调用长按

- (void)ontappLongPressGesture:(id)sender{ 

    //Long press code here 

} 

但是这种方法没有得到所谓的自来水

-(void)cellSelected:(id)sender { 

    //Single tap code here 

} 
+2

我测试了这一点,并删除了委托,它的工作。 – Arbitur

+1

尝试删除代表。你告诉他们可以同时开火的姿势。不是这种情况。您只需轻按或长按即可。不是都。 – Fogmeister

回答

4

您还未指定wh在你把这些gestureRecognizer的视图的类型,但是因为你称它为“细胞”,我假设它在UITableView?

你需要确保你设置cancelsTouchesInView标志,如果这样:

gesture.cancelsTouchesInView=NO; 
1

我了解你使用的UITableViewCell那些手势。你为什么不使用tableView:didSelectRowAtIndexPath:

1

您或者需要使用以下两种方法之一。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    // test if our control subview is on-screen 
    if (cell.view.superview != nil) { 
     if ([touch.view isDescendantOfView:cell.view]) { 
      // we touched our control surface 
      return YES; // handle the touch 
     } 
    } 
    return NO; // ignore the touch 
} 

在这里,您需要指定您希望gestureRecognizer的看法。

或者你也可以使用这些代码行

gesture.cancelsTouchesInView = NO; 
longPressGesture.cancelsTouchesInView = NO; 

希望它会帮助你。