ボタンに接続されたIBActionがあり、ボタンが押されていなくてもその関数を実行する方法があるかどうかを知りたいと思いました。これは私が試したものです...
注:このプロジェクトではSwiftを使用しています。
//I get an error when I type this code?
self.buttonPressed()
@IBAction func buttonPressed(sender: AnyObject) {
print("Called Action")
}
送信者引数をオプションにし、ButtonPressedにnilを渡します。
self.ButtonPressed( nil )
@IBAction func ButtonPressed( sender: AnyObject? ) {
println("Called Action")
}
1つの方法は、ボタンをそれぞれのInterface Builderボタンにリンクし、呼び出すときに関数に渡すことです。
@IBOutlet weak var yourButton: UIButton!
// When you call method
self.buttonPressed(yourButton)
//function must begin with small letter as per iOs naming convention
@IBAction func buttonPressed(sender: AnyObject) {
//println("Called Action"). This method has been renamed to print() in Swift 2.0
print("Called Action")
}
または、そのように関数を定義すると、以前と同じ方法でメソッドを呼び出すことができます。
@IBAction func buttonPressed(sender: AnyObject? = nil) {
print("Called Action")
}
//Call your method like this
self.buttonPressed()
ButtonPressed
関数には引数sender
が必要ですが、それを呼び出すときに何も渡されません。ただし、これをプログラムで実行している場合は、明らかにsender
がありません。
これを回避する2つの方法:
AnyObject
の代わりに_AnyObject?
_)にして、self.ButtonPress(nil)
を呼び出します。私はこれを試したところ、うまくいきました。performButtonPress()
)。 IBActionアウトレット内から呼び出します。プログラムでボタンを押したい場合は、performButtonPress()
を直接呼び出します。次の形式を使用してボタンアクションを呼び出します:Swift
@IBAction func buttonSelected(_ sender: UIButton) {
print("Butten clicked")
}
ボタンアクションを呼び出すには:
let button = UIButton()
self.buttonSelected(button)
「送信者」として「自己」を使用する必要があります。例:
self.buttonPressed (sender: self)
またはより単純なバージョン
buttonPressed (sender: self)
両方ともSwift 3
lazy var Button : UIBarButtonItem = {
let barButtonItem = UIBarButtonItem(title: "Button", style: .done, target: self, action: #selector(btnSelection))
return barButtonItem
}()
func btnSelection(){
// Code
}
// Now you can call self.btnSelection() whenever you want