2017-12-05 13 views
1
私は機能を持っていなくて

UIButtonにaddTargetする方法...送信者

私NewButtonを作成するときに、私は接続
func MyFunc (_ sender: AnyObject) { 
    let n = sender.tag! //do stuff with 'n' 
} 

...

NewButton.addTarget(self, action: #selector(Main.MyFunc(_:)), for: .touchUpInside) 

私は呼びたいと思います私のコードの他の領域には、送信者なしでMyFuncがあります。送信者を使わずにボタンに.addターゲットを設定することは可能ですか?

ような....

NewButton.addTarget(self, action: #selector(Main.MyFunc(n: 5)), for: .touchUpInside) 

と...

func MyFunc (n: Int) { 
    //do stuff with 'n' 
} 

私は一つの解決策のようなルーティング機能だろう知っている...

func router (_ sender: AnyObject) { 
    MyFunc(n: sender.tag!) 
} 

しかし、よりエレガントな方法があるのだろうかと思っています。

+0

何ですか?なぜパラメータとしてボタンを渡すだけではないのですか?そして、はい、送信者なしでターゲットを作成することができます。ただ引数を入れないでください。接続すれば、あなたはストーリーボードを介していることを意味し、それから送信者がいるはずだと思います。 – Brandon

答えて

1

この関数はタイプAnyObjectの送信者を使用するため、任意のオブジェクトを関数の引数として使用できます。条件付きで必要なタイプにキャストするだけで済みます。

let button = UIButton() 
button.addTarget(self, action: #selector(touched(_:)), for: .touchUpInside) 

touched(1 as AnyObject) // Works 

@objc func touched(_ sender: AnyObject) { 
    if let casted = sender as? Int { 
     // Do something with casted as an Int 
    } else if let casted = sender as? UIButton { 
     // do something with casted.tag 
    } 
} 
+0

これは動作します。ありがとうございました – Dustin

関連する問題