私は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.
}
}
}
問題は、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.
}
}
}
それがあなたを助けることを願っています。