2016-10-16 3 views
1

buttontitleを以下のように迅速に取得しようとしました。我々は、送信者の後.を押すとsender.titleForState(.Normal)を使用して、Swift 3.0、iosのボタンの現在のタイトルを取得する方法!

@IBAction func buttonAction(_ sender: Any) { 
    let buttonTitle = sender.titleForState(.Normal)! 
} 

が、それは動作しませんでしたが、でもそれはどんなhint与えるものではありません。

ので、迅速3.0

もないと私たちはIBOutletを作成し、我々はそのcurrentTitleを使用している場合、それは以下のように正常に動作でこれを行うための正しい方法は何ですか。パラメータ送信者がタイプAnyの代わりUIButtonにあるので、なぜ我々は

上記
@IBOutlet var thebutton: UIButton! 

@IBAction func buttonAction(_ sender: Any) { 
    let buttonTitle = thebutton.currentTitle! 
    print(buttonTitle) 
} 
+1

送信者を「UIButton」に変更します。 – rmaddy

答えて

6

ためsender.でそれを得ることができません。メソッドのシグネチャを次のように変更します。

@IBAction func buttonAction(_ sender: UIButton) { 
    if let buttonTitle = sender.title(for: .normal) { 
    print(buttonTitle) 
    } 
} 

とするとよいでしょう。

+0

これはうまくいきますが、 'let buttonTitle = sender.title(for:.normal)!'のようにアンラップする必要があります。助けてくれてありがとう。 –

+0

ボタンのタイトルに値(nil)があるかどうかを確認する必要があるのはなぜですか、私たちは値があることを知っているので、 'nil'をチェックするのではなく' unwrap'するだけです。 –

+0

はい、もしそれがnilでないと確信があるなら、 'if let'節の代わりに'! 'を使います。私は個人的には '! 'をできるだけ避けるようにします。なぜなら、あなたのコードを、オプションのアンラップを解除することによって引き起こされるような予期しない例外に対して脆弱にするからです。 – ozgur

0

スイフト3.0以来、それは

sender.titleForState(.Normal)から変更しました! >> sender.title(for:.normal)!

変更任意から任意オブジェクト

@IBAction func buttonPressed(_ sender: AnyObject) { 
    let title = sender.title(for: .normal)! 
    print("\(title) button pressed") 
} 
関連する問題