2012-04-01 10 views
0

私はUIButtonsを以下のようにループ内に作成しています。ここのケースで送信者に関する情報を取得する方法

for(int i = 1; i <= count; i++){ 

     if(i ==1){ 
      UIButton *btn1 = [[UIButton alloc]initWithFrame:CGRectMake(0, 10, 40, 40)]; 
      [btn1 setImage:image2 forState:UIControlStateNormal]; 
      [self addSubview:btn1]; 
      continue; 
     } 
     x = x + 40; 
     y = y + 50; 
     UIButton *btn2 = [[UIButton alloc]initWithFrame:CGRectMake(x , y, 40, 40)]; 
     [btn2 setImage:image1 forState:UIControlStateNormal]; 
     [btn2 addTarget:self action:@selector(buttonPressed) 
     forControlEvents:UIControlEventTouchUpInside]; 

     [self addSubview:btn2]; 
    } 

そして、私はUIButtonを扱うには、私はメソッドをイベント処理でクリックしたどのボタンについての情報が必要

-(void) buttonPressed{ 

} 

などのイベントをクリックしました。私は、クリックされたボタンのフレームを取得する必要があります。このコードを変更して、送信者に関する情報を取得するにはどうすればよいですか。

答えて

4

それはbtn.tag=i;のように作成され、あなたが何をすべきこの

-(void) buttonPressed:(id)sender{ 
// compare sender.tag to find the sender here 
} 
+0

..あなたが相互作用して、タグ等、テキストなどのその性質は、それが役に立てば幸いアクセスできるのは何を保持しようとして、このパラメータsenderでそう
-(void) buttonPressed: (id)sender { UIButton *tempBtn=(UIButton *) sender; if(tempBtn.tag==1) // determine which button was tapped using this tag property. { // Do your action like.. tempBtn.backgroundColor=[UIColor blueColor]; tempBtn.alpha=0.5; } } 

メソッド内で送信者のプロパティを取得していません。 –

+0

((UIButton *)).frame –

+3

セレクタを 'buttonPressed:'に変更する必要があります(コロンに注意してください)。送信者が常にわかっている場合は 'id'の代わりに' UIButton'を入れてキャストする必要はありません。 – jrturton

1

のようなあなたの方法を定義し直している間に、あなたのボタンにタグを追加しますが、あなたのコード内でこれらの行を追加します:

for(int i = 1; i <= count; i++) 
{ 

    if(i ==1){ 
     UIButton *btn1 = [[UIButton alloc]initWithFrame:CGRectMake(0, 10, 40, 40)]; 
     [btn1 setImage:image2 forState:UIControlStateNormal]; 

     [btn1 setTag:i]; // This will set tag as the value of your integer i; 

     [self addSubview:btn1]; 
     continue; 
    } 
    x = x + 40; 
    y = y + 50; 
    UIButton *btn2 = [[UIButton alloc]initWithFrame:CGRectMake(x , y, 40, 40)]; 
    [btn2 setImage:image1 forState:UIControlStateNormal]; 

    [btn2 setTag:i]; // also set tag here. 
    [btn2 addTarget:self action:@selector(buttonPressed) 
    forControlEvents:UIControlEventTouchUpInside]; 

    [self addSubview:btn2]; 
} 

そして、

-(void) buttonPressed: (id)sender 
{ 

    if(sender.tag==1) // determine which button was tapped using this tag property. 
    { 
     // Do your action.. 
    } 
} 

またはこれを行うことができますこの方法では、送信者のオブジェクトをこのUIBttonオブジェクトにコピーします。

その私ならば、問題があるかもしれないあなたの UIButton
+0

コロンを含めるには、セレクタも変更する必要があります。 – jrturton

+0

私はここにタグのプロパティを取得していません。すべて安心です。送信者には何も表示されません。 –

+0

私の悪いです。私が 'id'を'(UIButton *) 'に変更したときの動作 –

関連する問題