2016-06-10 2 views
5

Ich bin dabei, schnell zu lernen. Ich würde gerne wissen, wie man eine Funktion programmgesteuert aufruft, wenn eine Taste gedrückt wird .... Ich habe es versucht, aber die Funktion wird direkt beim Programmstart ausgeführt, nicht wenn ich den Knopf drücke ... Kannst du mir bitte helfen dieses Problem zu beheben .. Danke unter dem vollen ViewController.swift für diesen Test Appeinfache Aktion erstellen, wenn NSButton in swift gedrückt wird

// 
// ViewController.swift 
// hjkhjkjh 
// 
// Created by iznogoud on 14/05/16. 
// Copyright © 2016 iznogoud. All rights reserved. 
// 

import Cocoa 


class ViewController: NSViewController { 

    func printSomething() { 
    print("Hello") 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let myButtonRect = CGRect(x: 10, y: 10, width: 100, height: 10) 
    let myButton = NSButton(frame: myButtonRect) 
    view.addSubview(myButton) 
    myButton.target = self 
    myButton.action = Selector(printSomething()) 


    // Do any additional setup after loading the view. 
} 

override var representedObject: AnyObject? { 
    didSet { 
    // Update the view, if already loaded. 
    } 
} 


} 

Antwort

8

Das Problem in der Art und Weise liegt Sie Ihre selector

myButton.action = Selector(printSomething()) 

die Syntax hinzufügen Selektoren für das hinzufügen von ein wenig schrullig , geben Sie eine Zeichenfolge mit dem Namen der Funktion, also sollten Sie in Ihrem Fall schreiben:

myButton.action = Selector("printSomething") 

Welche sollten Sie mit Hello in Ihrer Konsole belohnen.

Und wahrscheinlich, weil die Syntax Menschen Probleme verursacht es Sie schreiben, so jetzt in Swift 2.2, geändert wurde:

myButton.action = #selector(ViewController.printSomething) 

statt. Das bedeutet, dass der Compiler Ihnen helfen kann, diese Fehler frühzeitig zu erkennen. Das ist ein großer Fortschritt, denke ich. Sie können weitere Informationen in den Release Notes für Swift 2.2 here

So ... hier ist Ihr gesamtes Beispiel lesen:

import Cocoa 

class ViewController: NSViewController { 

    func printSomething() { 
     print("Hello") 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
     let myButtonRect = CGRect(x: 10, y: 10, width: 100, height: 10) 
     let myButton = NSButton(frame: myButtonRect) 
     view.addSubview(myButton) 

     myButton.target = self 
     myButton.action = #selector(ViewController.printSomething) 
    } 

    override var representedObject: AnyObject? { 
     didSet { 
     // Update the view, if already loaded. 
     } 
    } 
} 

Hoffnung, das Ihnen hilft.

+1

Vielen Dank, das funktioniert, und vielen Dank für Ihre hervorragende Erklärung! – iznogoud

+1

Gern geschehen, froh, dass es funktioniert hat. – pbodsk

+0

Was soll ich für mehrere Tasten tun und auch wenn die neue Taste zu dieser Zeit den vorherigen Tastenrahmen der y-Position erstellt auch die Änderung sein. –