2016-04-18 10 views
1

私はセットアップが出口変数のボタンと使用方法から@IBOutlet必要スウィフトプログラミングに比較的新しく、ちょうど私が@IBActionコードの「送信者の引数を経由してUIButtonのテキストを変更することはできませんthis article on Stack Overflowから学んだんだけど、 。ルールの幅はどれくらいですか?どのような方法が「送信者」の議論に適用するのがOKであり、そうでないのですか?@UIActionコードSwiftで「送信者」引数を適切に使用する方法は?

+0

あなたの質問をあなたの行動方法で更新してください。 – rmaddy

+0

あなたは間違っています。 'sender'引数でボタンの属性を更新するのはまったく問題ありません。あなたがリンクした質問に対する答えが間違っている(または少なくとも非常に混乱しています)。 – rmaddy

答えて

0
@IBAction func buttonClicked(sender : AnyObject) { 
println("Button was clicked", sender) 
} 

ここで、送信者は、ボタンの参照を意味します。あなたは、これはあなたが言及:)

0

送信者の引数は、ターゲット・アクション機構の一部であるに役立つことを願っています

など sender.backgroundColorのような送信者を使用することにより、クリック上のボタンに異なる実行することができます。

通常、送信者パラメータはアクションメッセージを送信するコントロールを識別します(実際の送信者に代わる別のオブジェクトでも可能です)。この背後にある考え方は、はがきの返信先住所に似ています。ターゲットは送信者に問い合わせが必要な場合に詳細情報を問い合わせることができます。実際の送信オブジェクトが別のオブジェクトを送信者に置き換えた場合、そのオブジェクトを同じ方法で扱う必要があります。ターゲットで呼び出されます:たとえば、あなたがテキストフィールドを持っており、ユーザーがテキストを入力したときに、nameEnteredアクションメソッドが言う、送信者がsubstitudedことができるので

、誰かが別の送信者を使用することができることを保証するものではありませんIBOutletを使用してクラス内のボタンへの参照を所有している場合は、パラメータを手動で呼び出すと、呼び出すと思われるメソッドで使用する方が賢明かもしれませんボタン。あなたはこの方法が唯一の正しい送信者とリンクされていることを確認している場合

しかし、あなたが潜在的に任意のメソッドを呼び出すことができます。

私は、彼らがそのポストにあなたを参照しているかわからない

+0

これは全く質問に答えません。 – rmaddy

+0

ありがとう、私は完全に質問を誤解していた。私の答えを編集しました。 –

2

質問はできるだけ多くすること「とは何のアクション私が呼び出すことができる」ではないだろうが、「私は、送信者が本当にreleventボタンは本当に確信しています」それは正しいものではないので、リンクされています。具体的には何でも@IBOutletは必要ありません。ボタンに特別な権限を与えることはありません。これは、使用できるオブジェクトへのポインタです。

オブジェクトのメソッドを呼び出す場合は、オブジェクトへのポインタが必要ですが、へのsenderの属性は、IBActionのコードと同じです。

senderが正しいタイプであることを確認する必要があります。例えば

:正常に動作し、タップボタンを変更します

@IBAction func buttonPressed(sender: UIButton) { 
    sender.setTitle("New Title", forState: .Normal) 
} 

。どこにでも@IBOutletがある場合は問題ありません。変数はsenderで十分です。

いくつかのケースでは、あなたが最初の種類を確認する必要があります。その場合にはsenderためAnyObject種類、使用したいと思う:あなたは別のボタンのを変更したい場合は、今すぐ

@IBAction func buttonPressed(sender: AnyObject) { 
    if let button = sender as? UIButton { 
     button.setTitle("New Title", forState: .Normal) 
    } 
} 

は、タイトルを入力すると、@IBOutletが簡単になります。

@IBOutlet weak var someOtherButton: UIButton! 

@IBAction func buttonPressed(sender: UIButton) { 
    someOtherButton.setTitle("New Title", forState: .Normal) 
} 

ただし、@IBOutletは必須ではありません(推奨)。任意の特別な力を持っていない@IBOutletを表示するには、Interface Builderでボタンをtag値(例えば100)を設定し、このようなコードを使用することができます。

@IBAction func buttonPressed(sender: AnyObject) { 
    if let button = view.viewWithTag(100) as? UIButton { 
     button.setTitle("New Title", forState: .Normal) 
    } 
} 

私はここで使用してきた100数は任意ですビュー内の1つの項目の番号のみを使用する限り、任意の数にすることができます。

関連する問題