2015-03-30 1 views
2

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

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

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 
    } 
+0

try'override функ rightMouseDown (theEvent: NSEvent) { println («кнопка нажата»)} 'получил пример из [https://github.com/twe4ked/modal-menu/blob/master/ModalMenu/StatusItemView.swift] – chirag90

+0

@ chirag90, страница не найдена –

+0

Кроме того, мне нужно чтобы узнать, какая из моих кнопок была нажата. –

ответ

5

Я нашел решение. Вы можете добавить 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 
    } 
} 
+0

Как мне заставить ее работать с Control Click (что эквивалентно щелчку правой кнопкой мыши)? – Kaunteya

0

Ваш 'buttonPressed' функция будет вызвана с NSButton, которая была нажата.

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

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

+0

Эта функция вызывается только в том случае, если пользователь нажал кнопку 'NSButton' с левой кнопкой мыши –

Смежные вопросы