2016-12-16 2 views
1

Xcode 8 скор 3 для OSXSwift 3 OSX button.addTarget

У меня есть код, который создает кнопку в myView.I хотел бы добавить действие каждой из кнопок, которые она создает. Я считаю, что вы обычно используете button.addTarget, но это не работает для OSX. Любые идеи?

благодаря

import Cocoa 

class MainWindowController: NSWindowController { 

    var buttonArray: Array<NSButton> = [] 
    var buttonTitleArray: [String] = ["Answer1","Answer2","Answer3","Answer4"] 
    @IBOutlet weak var myView: NSView! 

    override func windowDidLoad() { 
     super.windowDidLoad() 

     var horizontalx = 50 

     //Create button Array and tag buttons 
     for i in 0..<buttonTitleArray.count{ 
      let button = NSButton(frame: NSRect(x: horizontalx, y: 50, width: 100, height: 50)) 
      button.tag = i 
      buttonArray.insert(button, at: i) 
      horizontalx = horizontalx + 100 
     } 

     //Adds Buttons to myView 
     for i in 0..<buttonTitleArray.count{ 
      let button:NSButton = buttonArray[i] 
      button.title = buttonTitleArray[i] 
      myView.addSubview(button) 
     } 

     //Just for testing we can find tag 
     for i in 0..<buttonTitleArray.count{ 
      let buttonFromArray = buttonArray[i] 
      let tag = buttonFromArray.tag 
      if (tag == 2){ 
       print("found Tag") 
      } 
     } 

    }//EO Overide 


}//EnD oF thE wORld 

ответ

1

В одном из петель:

button.action = #selector(buttonPressed) 

Тогда:

func buttonPressed(button:NSButton) { 
    print("Clicked \(button.title)!") 
} 
2

Я просто борется с этим, в основном, со статическими методами, поэтому я думал, 'd chime in (late) и добавить к ответу jlew.

Если вы установили button.action, также будьте осторожны, как вы установили button.target, особенно если вы оставите его nil. Помните, что #selector - это не просто «указатель на функцию», а ссылка объекта Objective-C через объект (цель). Страница Apple Objective-C Target-Action очень полезна.

Скажите, что вы хотите настроить кнопку «закрыть». Это легко ...

... но теперь скажите, что вы хотите перехватить этот вызов перед закрытием. Вы можете контрейлерных на существующий объект окна, делая это:

 button = NSButton() 
     button.title = "Exit" 
     button.action = #selector(window?.buttonPressed) 
    } 
} 

extension NSWindow { 
    func buttonPressed() { 
     Swift.print("Clicked Exit button!") 
     close() 
    } 
} 

Опять же, выше, конечно, для target из nil. В противном случае присвойте button.target объекту @objc, содержащему обработчик вашей кнопки.

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