0

スクロールビューで画像を表示するためにこのコードを使用しています...このボタンはforループの助けを借りて作成されています...そしてすべてのボタンに画像を設定します...今私は複数の画像を選択したいです...欲しい特定のボタンをクリックすると、その画像が「画像にチェックマーク」に置き換えられ、もう一度押すと、元の画像に置き換えると、チェックされていない状態で表示されます。

for(int i=0; i<[imageArray count]; i++)
{
  if((i%4) == 0 && i!=0)
  {
      horizontal = 8.0;
      vertical = vertical + 70.0 + 8.0;
  }

  buttonImage = [UIButton buttonWithType:UIButtonTypeCustom];
  [buttonImage setFrame:CGRectMake(horizontal, vertical, 70.0, 70.0)];
  [buttonImage setTag:i];
  [buttonImage setImage:[arrayOfImages objectAtIndex:i] forState:UIControlStateNormal];
  [buttonImage addTarget:self action:@selector(buttonImagePressed:) forControlEvents:UIControlEventTouchUpInside];
  [myScrollView addSubview:buttonImage];

  horizontal = horizontal + 70.0 + 8.0;
}

(buttonImagePressed)メソッドの状態変更時に変更された画像に対してこのコードを試しました...

[buttonImage setImage:[UIImage imageNamed:@"Checkmark.png"] forState:UIControlStateSelected];

しかし、それは機能しません...そしてそれは特定のクリックされたボタンの代わりに毎回最後のボタンの画像だけを変更します....私もボタンを非表示にしようとしましたが、それは再び最後のボタンだけを非表示にします。どこで間違っているの?

それを変更する別の方法がありますか?私を助けてください

4

2 に答える 2

4

UIControlStateSelectedの代わりに、UIControlStateNormalを使用して、そのボタンが以前に選択されたかどうかを示すブール値を保持するか、選択に基づいてボタンの選択されたプロパティをtrueまたはfalseに設定できます。

-(void) buttonImagePressed:(UIButton*)sender
{
   UIButton *button = sender;
  if(button.selected) //already selected so now it should be deselected
  {
     [button setImage:[UIImage imageNamed:@"UnCheckmark.png"] forState:UIControlStateNormal];
      button.selected = false;
  }
   else
   { 
      [button setImage:[UIImage imageNamed:@"Checkmark.png"] forState:UIControlStateNormal];
      button.selected = true;
   }

}
于 2012-07-05T05:21:10.927 に答える
1

このために、グローバルフラグ変数を次のように取りますBOOL Flag = NO;

各ボタンにもタグを設定します。

メソッドで

-(IBAction)buttonImagePressed:(UIButton *)sender{
 if(flag==NO){
   flag=YES;
   [sender setImage:[UIImage imageNamed:@"Checkmark.png"] forState:UIControlStateNormal];
  }
 else{
 flag=NO;
 [sender setImage:[arrayOfImages objectAtIndex:sender.tag] forState:UIControlStateNormal];
 }
}
于 2012-07-05T05:28:05.737 に答える