2016-01-09 49 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