宣言の説明 - (ibaction)変化greeting :( id)sender; iPhone
-
25-10-2019 - |
質問
彼らはどこでもIBACTIONが何であるかを言うが、宣言全体が何を意味するのかを説明しないでください。
送信者とIDとは何ですか?
よろしく、ナムラサ
解決
私の知識によると
IBAction
ただ暗示しますvoid
id
あらゆる種類/クラスのオブジェクトを受け入れる一般的なCタイプです。それは何に似ているかです ボイドポインター のC
. 。使用できますid
メソッドのパラメーターとして、場合によっては、違いのオブジェクトがクラスの種類がそのメソッドにアクセスします。sender
, 、 ここ、- 人間名のパラメーター名です(何でも名前を付けることができます)
- メソッドを呼び出すオブジェクトを参照します
changeGreeting:
例:
メソッドを想定しましょう changeGreeting:
で定義されています ClassA
, 、そしてそれは次のように読みます。
- (IBAction)changeGreeting:(id)sender {
[sender setText:@"Hello %@", [sender class]];
// Nothing can be returned from this method
}
また、次の行があると考えてください Class B
.
// LINE 1
[aLabel addTarget:objOfClassA action:@selector(changeGreeting:) forControlEvents:UIControlEventTouchUpInside];
// LINE 2
[aTextField addTarget:objOfClassA action:@selector(changeGreeting:) forControlEvents:UIControlEventTouchUpInside];
1行目で、 aLabel
それは 送信者 と objOfClassA
それは 受信機. 。 2行目: aTextField
それは 送信者 と objOfClassA
それは 受信機. 。ここaLabel
& aTextField
呼ばれています 送信者 彼らはそうだからです 電話 メソッド changeGreeting:
. 。と objOfClassA
呼ばれています 受信機 なぜなら objOfClassA's
changeGreeting:
方法はです 呼び出されました ここ。
ユーザーが内部に触れると aLabel
また aTextField
, 、 彼らの text
に変更されます Hello UILabel
また Hello UITextField
それぞれ。
反対に:電話することもできます changeGreeting:
の方法 objOfClassA
から Class B
次のように。
[objOfClassA changeGreeting:aLabel];
[objOfClassA changeGreeting:aTextField];
上記のコードは自明であるため、 objOfClassA
それは 受信機. 。しかし aLabel
& aTextField
そうではありません 送信者. 。彼らは方法を呼び出していないからです。ここでは、それらは単なる議論です。ここで実際の送信者はそうです Class B
, 、 しかし aLabel
と aTextField
議論に渡されます (id)sender
. 。いずれにせよ、メソッド実行の結果は同じです。
他のヒント
たぶん、Objective-Cチュートリアルをチェックする必要があります(このようなもの)、これはかなり基本的なものだからです。
ibactionは「void」として定義されているため、メソッドに戻り値がないことを意味します。インターフェイスビルダーのみに役立つため、どのメソッドが実際にリンクできるアクションであるかを知っています。
(ID)送信者部分は、メソッドの(唯一の)パラメーターであり、送信者と名付けられています。 (ID)は、パラメーターのタイプが任意のオブジェクトになる可能性があると言います。
から Objective-C FAQ:
IDとは何ですか?
これは、Objective-Cが任意のオブジェクトに使用する一般的なCタイプです。 [...
IBAction
キーワードです(#define
'd to void
)インターフェイスビルダーはソースコードで検索し、リターンタイプとして見つけた場合、IB要素を配線できる可能性のあるアクションのリストに追加します。
id
Objective-Cの一般的なオブジェクトタイプです どれか Objective-Cオブジェクト。
と sender
ただの名前です id
-Typedパラメーター。
機能的には、Ibactionは、インターフェイスビルダーを介してリンクできるメソッドを識別するためのキーワードです。 (ID)送信者は、いくつかのコントロールに同じ方法を使用した場合に、オブジェクトがメソッドをトリガーしていることを識別するために必要です。