2009-05-23 14 views
25

ボタンを作成し、タイトルを「ここをクリック」と設定します。そのボタンを押すと、そのボタンのタイトルを取得してログに記録します。ここに私のコードがあります、どこが間違っていますか?イベントハンドラで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. 
} 

答えて

72

あなたdisplayvalue:

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

(。Xcodeでドキュメントをチェックアウトしてください、それはあなたに正しい答えを与えているだろう)

+1

非常に良い歓声に –

13
-(void)displayvalue:(id)sender 
{ 
    UIButton *resultebutton= (UIButton*)sender; 
    NSLog(@"The button title is %@ ", resultebutton.titleLabel.text); 
} 
1
-(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

を関数のパラメータをキャストしている途中の男性を切り取って、ちょうど関数のシグネチャを設定します。 'mybutton'をインスタンス変数にする必要がありますが、' -clicketbutton'のインスタンス変数にボタンを割り当てる必要があります - 現在、そのメソッドはローカル変数を使用しています。言い換えれば、 'mybutton'はあなたの2つのメソッドで異なることを表します。 –

+0

@ThomasMüllerが正しい。 'myButton'変数はdisplayValue:関数の範囲外です。しかし、 'myButton'ではなく' sender'をレシーバとして使用した場合、これはうまくいくでしょう。 – mylogon

3

これは少し古い質問ですが、これはおそらくこれを解決するための最もきれいな方法です。

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

編集
私は、これはあなたがUIButton*に受信パラメータを設定しているという事実に依存していることに気づきました。デフォルトのidを使用する代わりに、UIButtonオブジェクトを作成し、そのボタンに(id)senderをキャストします。私はこれがすべてで動作するとは思わない

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

にこれは効果的

関連する問題