次のコードに (id) 送信者をどのように追加しますか?
- (IBAction) gobutton: (UIButton *) button5 {
私が試したことはすべて失敗します。助けていただければ幸いです。ありがとう。
編集: (UIButton *) ボタン 5 の参照を (IBAction) に保持する必要があります
次のコードに (id) 送信者をどのように追加しますか?
- (IBAction) gobutton: (UIButton *) button5 {
私が試したことはすべて失敗します。助けていただければ幸いです。ありがとう。
編集: (UIButton *) ボタン 5 の参照を (IBAction) に保持する必要があります
私の記憶が正しければ、そしてあなたが私が思うようにこれを使っているなら、
- (IBAction) gobutton: (id) sender {
if(sender == button5)
//do something...
else
//do something else...
}
button5 をパラメーターとして指定して、button5 が押されたときにこれが実行されることを示すと仮定します。
わかりました、まず.... IBAction
Interface Builder を除いて、特別なことは何も意味しません。基本的:
#define IBAction void
だから、あなたが見るたびにIBAction
、「空」と考えてください。これが存在する唯一の理由は、メソッドがコントロール アクションを接続する有効なメソッドであることを Interface Builder に伝えるためのフラグです。Objective-C コンパイラはそれについて知る必要がないため、すべての「アクション」メソッドが void を返すため、void に定義されています。
第 2 に、アクション メソッドには 1 つの引数もあり、これは任意の数の型のオブジェクトである可能性があります。このため、アクション メソッドはid
引数の型として type を使用することになっています。こうすることで、コンパイラが型チェック エラーを生成することなく、Objective-C オブジェクトへのポインタを渡すことができます。
したがって、通常、アクションは次のように機能するはずです。
- (IBAction)myAction:(id)sender {
if (sender == self.someButton) {
UIButton *button = (UIButton *)sender;
...
return;
} else if (sender == self.someControl) {
UIControl *control = (UIControl *)sender;
...
return;
}
}
言い換えれば、ある関数が未知の型へのポインターを取得する必要がある場合に、C でid
a が日常的に使用されるような型なしポインターのようなものです。さまざまなタイプのコントロールになる可能性があるため、コードがそれが何であるかを認識したら、送信者はより具体的なものにキャストされます。void *
sender
id
IBAction
いずれにせよ、 Interface Builder でそのメソッドをターゲット アクションとして使用する場合を除き、何かを戻り値の型として定義する理由はまったくありません。アプリのデリゲートに IBAction を持つことは、ちょっと珍しいようです....
何をしようとしているのかは明確ではありませんが、ほとんどのアクションは次のようになります。
- (IBAction) gobutton: (id)sender;
アクションの最初のパラメーターは常に送信者です (必要に応じてタイプと名前を指定できます)。
メソッドがボタンのアクションである場合、最初のパラメーターはボタンになります。そのメソッドが複数のボタンのアクションである場合、最初のパラメーターを使用して、どのボタンがタップされたかを判断できます (Leper が説明しているように)。
実際に解決しようとしている問題は何ですか?
アクションメソッドに情報を渡すテクニックがあります。たとえば、テーブル ビュー セルに表示され、すべてのセルに対して同じアクションを実行するボタンがある場合、アクション メソッドで、どのセルのボタンがタップされたかを判断できるようにする必要があります。
ユーザーがコントロールに触れる前に送信者の ID を取得するにはどうすればよいですか?
それを見つけた!タグを設定し、viewWithTag を使用します。
UIButton と送信者の両方を含む単純な構造を作成して使用できますか?
struct myObject { UIButton* button5; ID送信者; }
...または、独自の NSObject を作成することもできます (おそらくもっとココアっぽい):
@instance myObject : NSObject { ... }