30

IBAction が呼び出されると:

-(IBAction) onClick1: (id) sender;

送信者には何が渡されますか? IB を介して接続されているため、よくわかりません。私の質問は、ボタンのテキストを渡されたオブジェクト (おそらく NSString) にして、アクションの実装内で呼び出すことができるようにする方法です。

-(IBAction) onClick1: (id) sender {
  NSLog(@"User clicked %@", sender);
  // Do something here with the variable 'sender'
}
4

7 に答える 7

60

sender、アクションを開始したコントロールである必要があります。ただし、その型を仮定するのではなく、 として定義したままにしておく必要がありidます。代わりに、次のように実際のメソッドでオブジェクトのクラスを確認します。

- (IBAction)onClick1:(id)sender {
    // Make sure it's a UIButton
    if (![sender isKindOfClass:[UIButton class]])
        return;

    NSString *title = [(UIButton *)sender currentTitle];
}
于 2009-05-20T15:43:24.173 に答える
25

それは実際には:

-(IBAction) onClick1: (id) sender {
  NSLog(@"User clicked %@", sender);
  // Do something here with the variable 'sender'
}

senderではなく、NSStringタイプidです。イベントを送信したのはコントロールだけです。したがって、ボタンのクリックでメソッドがトリガーされると、UIButtonクリックされたオブジェクトが送信されます。UIButtonすべての標準メソッドとプロパティにプログラムでアクセスできます。

于 2009-05-20T15:38:55.650 に答える
14
-(IBAction)onClick:(id) sender {
     UIButton *btn = (UIButton *)sender;

    //now btn is the same object. And to get title directly
    NSLog(@"Clicked button: %@",[[btn titleLabel] text]);
}
于 2011-02-07T05:43:27.463 に答える
10

次のコードを書くだけです

-(IBAction) getButtonTitle:(id)sender
{
     UIButton *button = (UIButton *)sender; 
     NSString *buttonTitle = button.currentTitle;
     NSLog(@"Button Title %@",buttonTitle);

}

それはそれです...あなたはやった!!!

于 2012-10-18T12:26:14.240 に答える
2

以下を使用して、ボタンのラベルを取得し、クリックされたものを特定できます。

NSLog(@"Clicked button: %@",[[sender titleLabel] text]);

あなたの質問に答えるために、id は IB のオブジェクトです。

于 2010-11-27T19:00:52.203 に答える
2

Sender は、int や NSString ではなく、型 ID として定義する必要があります。送信者は、メソッドを呼び出している実際のオブジェクトです。ボタンに接続した場合は UIButton になり、テキスト フィールドの場合は UITextField になります。これを使用して、コントロールから情報 (テキスト フィールドの現在の文字列値など) を取得したり、複数のコントロールが同じアクション メソッドに接続されている場合は IBOutlet インスタンス変数と比較したりできます。

于 2009-05-20T15:40:05.257 に答える