web-dev-qa-db-ja.com

イベントハンドラーでのUIButtonのタイトルの取得

ボタンを作成し、タイトルを「ここをクリック」に設定します。そのボタンを押すと、そのボタンのタイトルを取得してログに記録します。これが私のコードですが、どこが間違っていますか?

-(void)clicketbutton {
    UIButton *mybutton = [UIButton buttonWithType:UIButtonTypeCustom];
    [mybutton setTitle:@"Click here"  forState:UIControlStateNormal];
    [mybutton addTarget:self  
       action:@selector(displayvalue:)forControlEvents:UIControlEventTouchUpInside]; 
}

-(void)displayvalue:(id)sender {       
    UIButton *resultebutton= [UIButton buttonWithType:UIButtonTypeCustom];

    resultebutton=sender;// pls clear here.. my question here , it it possible or not. if possible how ?
    NSLog(@" The buttontitile is %@ ", [resultebutton.Title] // here also.
}
25
Raju

Displayvalue:メソッドは次のようになります。

-(void)displayvalue:(id)sender {       
    UIButton *resultButton = (UIButton *)sender;
    NSLog(@" The button's title is %@.",  resultButton.currentTitle);
}

(XCodeのドキュメントを確認してください。正しい答えが得られます。)

72
-(void)displayvalue:(id)sender 
{
    UIButton *resultebutton= (UIButton*)sender;
    NSLog(@"The button title is %@ ", resultebutton.titleLabel.text);
}
13
Vaibhav Saran

私はそれが少し古い質問であることを知っていますが、これはおそらくこれを解決するための最も近い方法です。

NSLog(@"The button title is: %@", [sender currentTitle]);        

編集
これは、受信パラメータをUIButton*に設定したという事実に依存していることに気づきました。デフォルトのidを使用するのではなく、UIButtonオブジェクトを作成して(id)senderをそのボタンにキャストします。中間者を切り取り、関数シグネチャを次のように設定します

-(void)buttonPressed:(UIButton*)sender{
  NSLog(@"Button title: %@",sender.currentTitle);
}  

これは効果的に関数パラメーターをキャストしています

3
mylogon
-(void)clicketbutton {
    UIButton *mybutton = [UIButton buttonWithType:UIButtonTypeCustom];
    [mybutton setTitle:@"Click here"  forState:UIControlStateNormal];
    [mybutton addTarget:self  
       action:@selector(displayvalue:)forControlEvents:UIControlEventTouchUpInside]; 
}
-(void)displayvalue:(id)sender {       

     NSLog(@"The title is %@ ", [mybutton titleForState:UIControlStateNormal]);

}
1
iworld