2017-10-04 8 views
0

標準的な方法は、次のとおりです。セレクタを使わずにUIButtonタップに応答する方法はありますか? UIButtonタップに対応するための

  1. 静的メソッドをリンクしてIBActionでイベントをタップします。
  2. UITapGestureRecognizerを使用し、targetと(指定子)を指定します。

私は、イベントハンドラがblock/closure迅速になりたい、彼らは(なし特定のターゲット/アクション)、より柔軟性があり、かつ再構成することができます。

ターゲット/アクションのフープをジャンプすることなくこれを行う方法はありますか?

私はSwift 3を途中で使用しています。

そして私はプライベートメソッドを使用して、この質問、読んだことがある:あなたが閉鎖ベースのAPI周りのセレクタ構文をラップ独自のボタンサブクラスを作成することができ Gesture Recognizers and Blocks

+0

ありがとうございます。私は適切なキーワードで検索していないと思うので、セマンティックキーワードマッチをサポートする必要があります... – NeoWang

答えて

3

を。

class MyButton: UIButton { 

    var action: (() ->())? 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     sharedInit() 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     sharedInit() 
    } 

    private func sharedInit() { 
     addTarget(self, action: #selector(touchUpInside), for: .touchUpInside) 
    } 

    @objc private func touchUpInside() { 
     action?() 
    } 

} 

ボタンにアクションを追加するには、クロージャーを設定するだけです。

let button = MyButton() 
button.action = { 
    print("hello") 
} 
関連する問題