2013-07-08 49 views
1

我添加UILongPressGestureRecognizer幾個UIButton與代碼:要知道這UILongPressGestureRecognizer被觸發

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(btnLong:)]; 
[btnOne addGestureRecognizer:longPress]; //there are btnTwo, btnThree for example 

當我長按一個按鈕的方法被稱爲:

-(void)btnLong:(UILongPressGestureRecognizer *)gestureRecognizer{ 

    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) { 
    } 
} 

我的問題是,我怎麼知道哪個UILongPressGestureRecognizer被觸發,因爲UILongPressGestureRecognizer沒有標籤屬性。

回答

3

給每個按鈕一個唯一的標籤號碼。然後在動作方法,你可以這樣做:

-(void)btnLong:(UILongPressGestureRecognizer *)gestureRecognizer{ 
    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) { 
     UIView *view = gestureRecognizer.view; 
     if (view.tag == 1) { // first button's tag 
      // process 1st button 
     } else if (view.tag == 2) { // second button's tag 
      // process 2nd button 
     } 
    } 
} 

另一種選擇,如果你有每個按鈕網點,你可以這樣做:

-(void)btnLong:(UILongPressGestureRecognizer *)gestureRecognizer{ 
    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) { 
     UIView *view = gestureRecognizer.view; 
     if (view == self.firstButton) { 
      // process 1st button 
     } else if (view == self.secondButton) { 
      // process 2nd button 
     } 
    } 
} 

其中firstButtonsecondButton是你的按鈕屬性。是的,使用==適用於檢查手勢的視圖是否是其中一個按鈕,因爲您確實需要比較對象指針。

0

爲什麼不把手勢REC的共同superview?然後你可以通過使用locationInView來確定哪個UIView被長時間按下,然後訪問視圖的標籤屬性。

+0

你覺得這是無聊找出超級視圖的位置來決定哪一個是cilicked – itenyh

0

我已經使用的UIView的子視圖的tableview細胞。我將UILongGesture應用於此。這是代碼爲我工作。

func handleLongPressGesture(_ longPressGestureRecognizer: UILongPressGestureRecognizer){ 

      if longPressGestureRecognizer.state == UIGestureRecognizerState.began 
      { 
       let touchPoint = longPressGestureRecognizer.location(in: tableViewObj) 

          if let indexPath = tableViewObj.indexPathForRow(at: touchPoint) 
          { 
           print(indexPath.row) 



       } 
      } 
} 

您有索引路徑。你可以做任何你需要做的事情。

相關問題