web-dev-qa-db-ja.com

NSButtonが押された場合の単純なアクションの作成swift

私はSwiftを学んでいるところです。ボタンが押された場合にプログラムで関数を呼び出す方法を知りたいのですが。これを試しましたが、ボタンを押したときではなく、プログラムの起動時に直接関数が実行されます。これを修正するのを手伝ってくれませんか。

これが私が試したことです、

//
//  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.
       }
    }
}
13
iznogoud

問題は、selectorを追加する方法にあります

myButton.action = Selector(printSomething())

セレクターを追加するための構文は少し風変わりです。関数の名前を含む文字列を指定するので、この場合は次のように記述します。

myButton.action = Selector("printSomething")

これは、コンソールにHelloで報酬を与えるはずです。

そして、おそらく構文が人々の問題を引き起こしているため、Swift 2.2で変更されたので、次のように記述します。

myButton.action = #selector(ViewController.printSomething)

代わりに。これは、コンパイラーがこれらのエラーを早期に発見するのに役立つことを意味します。これは私が思うに大きな前進です。詳細については、Swift 2.2 here のリリースノートをご覧ください。

だから...これがあなたの全体の例です:

import Cocoa

class ViewController: NSViewController {

    @objc
    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.
        }
    }
}

それがあなたを助けることを願っています。

17
pbodsk