Распознать, если nsbutton нажата правой кнопкой мыши

У меня есть много NSButtons, сделанных программно, и мне нужно распознать, нажата ли одна из кнопок правой кнопкой мыши. Есть ли способ сделать это по-быстрому?

Код создания кнопок:

var height = 0
var width = 0

var ar : Array<NSButton> = []

var storage = NSUserDefaults.standardUserDefaults()

height = storage.integerForKey("mwHeight")
width = storage.integerForKey("mwWidth")

var x = 0
    var y = 0
    var k = 1
    for i in 1...height {
        for j in 1...width {
            var but = NSButton(frame: NSRect(x: x, y: y + 78, width: 30, height: 30))
            but.tag = k
            but.title = ""
            but.action = Selector("buttonPressed:")
            but.target = self
            but.bezelStyle = NSBezelStyle(rawValue: 6)!
            ar.append(but)
            self.view.addSubview(but)
            x += 30
            k++
        }
        y += 30
        x = 0
    }

2 ответа

Решение

Я нашел решение. Можете добавить NSClickGestureRecognizer каждой из кнопок с этим кодом:

var x = 0
    var y = 0
    k = 1
    for i in 1...height {
        for j in 1...width {
            var but = NSButton(frame: NSRect(x: x, y: y + 78, width: 30, height: 30))
            but.tag = k
            but.title = ""
            but.action = Selector("buttonPressed:")
            but.target = self
            but.bezelStyle = NSBezelStyle(rawValue: 6)!

            var ges = NSClickGestureRecognizer()
            ges.target = self
            ges.buttonMask = 0x2 //for right mouse button
            ges.numberOfClicksRequired = 1
            ges.action = Selector("rightClick:")
            but.addGestureRecognizer(ges)

            ar.append(but)
            self.view.addSubview(but)
            x += 30
            k++
        }
        y += 30
        x = 0
    }

И в функции rightClick Вы можете получить доступ к кнопке следующим образом:

func rightClick(sender : NSGestureRecognizer) {
    if let but = sender.view as? NSButton {
        // access the button here
    }
}

Ваша функция "buttonPressed" будет вызываться с нажатой кнопкой NSB.

func buttonPressed(b:NSButton) {
    debugPrintln(b.tag)
}

Этот код распечатает тег кнопки, который вы указали при создании кнопки.

Другие вопросы по тегам