web-dev-qa-db-ja.com

IBActionからボタンのテキストを取得する-iPhone

IBActionが呼び出されるとき:

-(IBAction) onClick1: (id) sender;

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

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

実際に:

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

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

25
Marc W

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

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

    NSString *title = [(UIButton *)sender currentTitle];
}
60
Matt Ball
-(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]);
}
14
GameLoading

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

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

}

それは...あなたがやった!!!

10
VSN

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

2

次を使用してボタンラベルを取得し、クリックされたボタンを判別できます。

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

質問に答えるために、IDはIBからのオブジェクトです。

2
Suresh

ボタンからテキストを取得するには:

 NSLog(@"Date::%@",[btn titleForState:UIControlStateNormal]);          
1
Hardik Thakkar