2013-07-28 55 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; 

希望它會幫助你。