2016-06-19 6 views
3

ための関数を作成します私はボタンの明示的な機能も宣言していません。私はボタンタグを使用することができますが、代わりにこれを行うことをお勧めします。スウィフトは、プログラムで使用すると、このようなボタンの機能を作成することができスウィフトでは、ボタン

+0

いいですね。 –

+1

私の答えは、 'UIButton'のサブクラスでどのようにできるかを示しています。 – vacawama

答えて

3

はこれを行うには、独自のUIButtonサブクラスを作成します。

また、ストーリーボードにUIButton秒でこれを使用する(だけMyButtonに自分のクラスを変更)してからviewDidLoadwhenButtonIsClickedを呼び出すことができます。

@IBOutlet weak var theButton: MyButton! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    theButton.whenButtonIsClicked { print("Hello World") } 
} 
1

Objective-Cの動的機能を使用したり、独自のタッチハンドラなどを追加したりする必要がない場合は、これをSwiftで行うだけですが、残念ながらこれはできません。

Swiftで#selectorが表示されると、コンパイラはobjc_MsgSendをフードの下で呼び出しています。 SwiftはObjective-Cの動機づけをサポートしていません。このセレクタをブロックで使い分けるためには、黒い魔法を使って動作させる必要があり、Objective-Cの構造を使ってそれを行う。

"yucky dynamic Objective-C stuff"についての苦労がなければ、おそらくUIButtonに拡張を定義し、関連付けられたオブジェクトを使ってオブジェクトに動的に関数を関連付けることができます。私はここで中止するつもりですが、もっと読むためにNSHipsterには、関連オブジェクトにはoverviewという偉大なものがあります。あなたがプログラムでボタンを作成し、その機能を設定するためにwhenButtonIsClickedを呼び出したときUIButtonためMyButton

class MyButton: UIButton { 
    var action: (()->())? 

    func whenButtonIsClicked(action:()->()) { 
     self.action = action 
     self.addTarget(self, action: #selector(MyButton.clicked), forControlEvents: .TouchUpInside) 
    } 

    func clicked() { 
     action?() 
    } 
} 

代替:

+1

私はObjective-Cを本当に使いたくありません。幸いなことに、IOSの「スタイル」をより有効に活用した優れたソリューションがあることが判明しました。 – Roymunson

0

また、単にUIViewをサブクラス化し、vacawamaなどの閉鎖が持つある性質を持つことができます。

var action:() ->()? 

次に、touchesBeganメソッドをオーバーライドして、ボタンに触れるたびにこの関数を呼び出します。このアプローチでは、UIBittonで始めることのすべての利点を得ることはできません。

-1
let bt1 = UIButton(type: UIButtonType.InfoDark) 
    bt1.frame = CGRectMake(130, 80, 40, 40) 

    let bt2 = UIButton(type: UIButtonType.RoundedRect) 
    bt2.frame = CGRectMake(80, 180, 150, 44) 
    bt2.backgroundColor = UIColor.purpleColor() 
    bt2.tintColor = UIColor.yellowColor() 
    bt2.setTitle("Tap Me", forState: UIControlState.Normal) 
    bt2.addTarget(self, action: "buttonTap", forControlEvents: UIControlEvents.TouchUpInside) 

    let bt3 = UIButton(type: UIButtonType.RoundedRect) 
    bt3.backgroundColor = UIColor.brownColor() 
    bt3.tintColor = UIColor.redColor() 
    bt3.setTitle("Tap Me", forState: UIControlState.Normal) 
    bt3.frame = CGRectMake(80, 280, 150, 44) 
    bt3.layer.masksToBounds = true 
    bt3.layer.cornerRadius = 10 
    bt3.layer.borderColor = UIColor.lightGrayColor().CGColor 

    self.view.addSubview(bt1) 
    self.view.addSubview(bt2) 
    self.view.addSubview(bt3) 

} 

func buttonTap(button:UIButton) 
{ 
    let alert = UIAlertController(title: "Information", message: "UIButton Event", preferredStyle: UIAlertControllerStyle.Alert) 
    let OKAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil) 
    alert.addAction(OKAction) 
} 
+1

あなたの答えにいくつかの説明を追加してください。 – HaveNoDisplayName

関連する問題