2016-01-09 50 views
0

我有一個6個按鈕的屏幕。所有按鈕都連接到一個IBAction。他們被標記,我使用switch語句來確定哪一個被挖掘。如何向這些按鈕添加長按手勢?

如何爲每個按鈕添加一個長按按鈕?例如,當我點擊按鈕1時,它知道它是長手勢還是輕擊手勢?

所以如果我點擊按鈕將做不同的事情,當我長按。

謝謝。

@IBAction func playPauseAudioButton(sender: UIButton) { 

    switch sender.tag { 

    case 1: 
     //Tap Gesture 
     //Long Gesture 
     //I need this for every button 
     print("1") 

    case 2: 
     print("2") 

    case 3: 
     print("3") 

    case 4: 

    case 5: 
     print("5") 

    case 6: 
     print("6") 

    default: 
     print("Default") 
    } 
} 

回答

5

做這樣的

@IBAction func playPauseAudioButton(sender: AnyObject) { 
    let tapGesture = UITapGestureRecognizer(target: self, action: "normalTap:") 
    let longGesture = UILongPressGestureRecognizer(target: self, action: "longTap:") 
    tapGesture.numberOfTapsRequired = 1 
    sender.addGestureRecognizer(tapGesture) 
    sender.addGestureRecognizer(longGesture) 
} 

func normalTap(sender : UIGestureRecognizer) { 
    let recognizer: UIGestureRecognizer = sender 
    let tag: Int = recognizer.view!.tag 

    switch tag { 
    case 1: 
     // Do some action for button 1 
     print("1") 
    case 2: 
     print("2") 
    case 3: 
     print("3") 
    case 4: 
     print("4") 
    case 5: 
     print("5") 
    case 6: 
     print("6") 
    default: 
     print("Default") 
    } 
} 

func longTap(sender : UIGestureRecognizer) { 
    let recognizer: UIGestureRecognizer = sender 
    let tag: Int = recognizer.view!.tag 

    if sender.state == .Ended { 
     print("UIGestureRecognizerStateEnded") 
     //Do Whatever You want on End of Gesture 
    } 
    else if sender.state == .Began { 
     print("UIGestureRecognizerStateBegan.") 
     //Do Whatever You want on Began of Gesture 
    } 

    switch tag { 
    case 1: 
     // Do some action for button 1 
     print("1") 
    case 2: 
     print("2") 
    case 3: 
     print("3") 
    case 4: 
     print("4") 
    case 5: 
     print("5") 
    case 6: 
     print("6") 
    default: 
     print("Default") 
    } 
} 
+0

感謝您的幫助!到目前爲止,它似乎工作正常,但當我按長手勢數字打印出兩次?你知道爲什麼嗎? – JohnCarp

+0

這是因爲'UILongPressGestureRecognizer'有兩個狀態,開始和結束。我已經更新了代碼,以便您可以選擇要使用@JohnCarp的那一個。 –

+0

似乎還有另一個問題。當我第一次點擊按鈕時它不起作用。當我點擊它時,它會工作?(點擊手勢)。對於長按按鈕,如果我按住按鈕不斷打印數字。有沒有什麼辦法解決這一問題?非常感謝! – JohnCarp

1

定義兩個IBActions並設置一個手勢識別器到每個人。這樣您可以爲每個手勢執行兩個不同的操作。

您可以在界面構建器中將每個手勢識別器設置爲不同的IBActions。

@IBAction func tapped(sender: UITapGestureRecognizer) 
{ 
println("tapped") 
//Your animation code. 
} 

@IBAction func longPressed(sender: UILongPressGestureRecognizer) 
{ 
println("longpressed") 
//Different code 
} 

通過代碼,而界面構建

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "tapped:") 
self.view.addGestureRecognizer(tapGestureRecognizer) 

let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: "longPressed:") 
self.view.addGestureRecognizer(longPressRecognizer) 

func tapped(sender: UITapGestureRecognizer) 
{ 
println("tapped") 
} 

func longPressed(sender: UILongPressGestureRecognizer) 
{ 
println("longpressed") 
} 

希望這有助於你。

+0

我是否將這兩個IBA連接到同一個按鈕? – JohnCarp