1

У меня есть несколько кнопок на своем пользовательском интерфейсе, и я хочу, чтобы выполнять различные функции в соответствии с различными типами мыши,Длительное нажатие & Tap распознаватель для нескольких UIButtons

  • Single Click
  • Double Click
  • Long Пресс

Делать это для одного крана было легко для меня, IBAction со всеми четырьмя кнопками, подключенных к нему, но и для других типов кликов я застрял,

Я понимаю, что мне нужно использовать кран жест распознаватель, но я не могу установить его на несколько UIButtons,

Вот и пример того, что я хочу сделать

import UIKit 

class ViewController: UIViewController { 


@IBOutlet weak var Label: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


func ButtonSingleTap(sender:UIButton!) { 

    let ButtonNumber: String = String(sender.tag) 
    Label.text = "Button " + ButtonNumber + " is Single Tapped" 
} 


func ButtonDoubleTap(sender:UIButton!) { 

    let ButtonNumber: String = String(sender.tag) 
    Label.text = "Button " + ButtonNumber + " is Double Tapped" 
} 


func ButtonLongTap(sender:UIButton!) { 

    let ButtonNumber: String = String(sender.tag) 
    Label.text = "Button " + ButtonNumber + " is Long Pressed" 
} 
} 

The UI Interface

ответ

2

Вы не можете использовать один экземпляр UIGestureRecognizer для нескольких кнопок. Каждой кнопке нужен собственный набор распознавателей жестов.

Вот пример, чтобы показать вам, как это сделать:

for button in [button1, button2, button3, button4] { 
    let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: Selector("didLongPress:")) 
    let doubleTapRecognizer = UITapGestureRecognizer(target: self, action: Selector("didDoubleTap:")) 
    doubleTapRecognizer.numberOfTapsRequired = 2 
    button.addGestureRecognizer(longPressRecognizer) 
    button.addGestureRecognizer(doubleTapRecognizer) 
} 

func didLongPress(recognizer: UILongPressGestureRecognizer) { 
    guard let button = recognizer.view as? UIButton else { return } 
    switch recognizer.state { 
    case .Began: 
     print("long press began button \(button.tag)") 
    case .Ended: 
     print("long press ended button \(button.tag)") 
    default: 
     break 
    } 
} 

func didDoubleTap(recognizer: UITapGestureRecognizer) { 
    guard let button = recognizer.view as? UIButton else { return } 
    print("double tap button \(button.tag)") 
} 

Для этой работы вы должны добавить Outlets для кнопок (button1, button2, button3, button4).

+0

Добавление распознавателя жестов в порядке, как я могу передать тег кнопки функции, которую я назвал? –

+0

Я обновил свой ответ – joern

+0

Это сработало отлично, спасибо ... но можете ли вы вкратце рассказать мне, что делает сделанное охранником утверждение? Цените свою помощь –