IBActionが呼び出されるとき:
-(IBAction) onClick1: (id) sender;
送信者に何が渡されますか? IBを介して接続されているので、よくわかりません。私の質問は、ボタンのテキストを渡されたオブジェクト(NSStringである可能性が最も高い)にして、アクション実装内で呼び出すことができるようにする方法です。
-(IBAction) onClick1: (id) sender {
NSLog(@"User clicked %@", sender);
// Do something here with the variable 'sender'
}
実際に:
-(IBAction) onClick1: (id) sender {
NSLog(@"User clicked %@", sender);
// Do something here with the variable 'sender'
}
sender
はNSString
ではなく、id
型です。イベントを送信したのはコントロールだけです。したがって、ボタンクリックでメソッドがトリガーされると、クリックされたUIButton
オブジェクトが送信されます。すべての標準のUIButton
メソッドとプロパティにプログラムでアクセスできます。
sender
は、アクションを開始したコントロールでなければなりません。ただし、そのタイプを想定せず、代わりにid
として定義されたままにしておく必要があります。代わりに、実際のメソッドでオブジェクトのクラスを次のように確認します。
- (IBAction)onClick1:(id)sender {
// Make sure it's a UIButton
if (![sender isKindOfClass:[UIButton class]])
return;
NSString *title = [(UIButton *)sender currentTitle];
}
-(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]);
}
次のコードを書くだけです
-(IBAction) getButtonTitle:(id)sender
{
UIButton *button = (UIButton *)sender;
NSString *buttonTitle = button.currentTitle;
NSLog(@"Button Title %@",buttonTitle);
}
それは...あなたがやった!!!
送信者は、intまたはNSStringではなく、タイプidとして定義する必要があります。送信者は、メソッドを呼び出している実際のオブジェクトです。ボタンに接続した場合、それはUIButtonになり、テキストフィールドの場合はUITextFieldになります。これを使用して、コントロールから情報(テキストフィールドの現在の文字列値など)を取得するか、同じアクションメソッドに複数のコントロールが接続されている場合は、IBOutletインスタンス変数と比較できます。
次を使用してボタンラベルを取得し、クリックされたボタンを判別できます。
NSLog(@"Clicked button: %@",[[sender titleLabel] text]);
質問に答えるために、IDはIBからのオブジェクトです。
ボタンからテキストを取得するには:
NSLog(@"Date::%@",[btn titleForState:UIControlStateNormal]);