Распознать, если 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)
}
Этот код распечатает тег кнопки, который вы указали при создании кнопки.