0

IBActionとIBOutletの違いは知っていますが、どちらをいつ使用すべきかわかりません。

たとえば、私は電卓を作ろうとしています。結果を表示するための10個のボタンと1個のラベルがあります。インターフェイスに10個のIBOutletを作成する必要がありますか?そうでない場合は、なぜですか?

4

3 に答える 3

4

anIBOutletはオブジェクトへの接続であり、anIBActionはコールバックとして呼び出されるメソッドへの接続です。たとえば、10個のボタンと1つのラベルがあるが、IBOutlet(値を更新できるようにする)と、10個のボタンのそれぞれのイベントに- (IBAction)buttonPressed:(id)sender;接続されている1つの関数を使用してラベルに接続する場合があります。onTouchUpInside次に、メソッドの実装は、その値が何であるかを把握するbuttonPressed:ためにを検査する必要があります。sender

IBOutletこれがあなたがする必要があるすべてであるならば、あなたは各ボタンのためにを持っている必要はないはずです。

于 2012-06-29T00:58:34.053 に答える
2

わかりました。IBOutletsとIBActionsは2つの別々の目的を果たします。

IBActionsは基本的に、IBを介してUI要素に接続できるメソッドです。これらは、UIで何かが発生したときにオブジェクトに通知する方法を提供します。また、メソッド内からメッセージを送信したUIエレメントにアクセスできるように、呼び出されたときに送信者引数を提供します。

一方、IBOutletは、コード内のUI要素への参照をいつでも取得する方法を提供します。これは、UIの側面を変更する必要がある場合に使用されます。

あなたの状況では、ボタンについて何も変更する必要がないため、ボタン用のIBOutletsを実際に用意する必要はありません。ボタンが押されたときに、通知を受ける必要があります。

注意として、ボタンがたくさんあり、何らかの理由でコード内からボタンにアクセスしてボタンに関する何かを変更する方法が必要な場合は、10個のIBOutletsを使用することはお勧めしません。代わりに、このviewWithTag:メソッドを使用し、それに応じて各ボタンタグを設定して、各ボタンのIBOutletsを作成する手間を省くようにします。

于 2012-06-29T01:02:53.100 に答える
0

あなたの場合、ラベル用に1つのIBOutletを作成し、ボタン用に1つのIBActionを作成します。ラベルのIBOutletは、ユーザーがボタンを押したときにテキストを更新するためのものです。IBActionは次のようになります。

-(IBAction)digitPressed:(UIButton *)sender{

    //First you have to check if there is currently any text in the label
    //If there is not, the below line of code is performed
    NSString *textWithDigit = [[yourLabel.text] stringByAppendingString: sender.titleLabel];

    //This line updates the label's text
    label.text = textWithDigit;
}

IBActionsとIBOutletsに関連するコードのみを入力しました(テキストを更新するにはラベルにIBOutletが必要であり、ラベルのテキストを押された数字に変更するにはIBActionが必要です)。必要なコードはもっとたくさんあります(ユーザーが現在数字を入力している最中であるかどうかを確認するために必要なコード、+、-、*、/などの操作のコード)が、これはほんの始まりにすぎません。

お役に立てれば!

于 2012-06-29T01:06:16.347 に答える