0

いくつかの値を持つRadioButtonのリストを動的に作成しました。プログラム的に、ボタンの状態を変更し、選択済みと未選択の画像を変更しました。しかし、問題は、すべてのラジオボタンを同時に選択できることです。実際、一度に1つずつ選択する必要があります。次のラジオボタンをクリックすると、以前に選択したボタンの状態が非選択に変更されます。

これが私のコードです。画像を変更してみましたが...コードに問題があります。

   RadioButton = [UIButton buttonWithType:UIButtonTypeCustom];
   [RadioButton setFrame:CGRectMake(0.0f, 0.0f, 20, 20)];
   [RadioButton setCenter:CGPointMake(116.0,p1)];
   [RadioButton setSelected:NO];
   [RadioButton setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal];
   [RadioButton addTarget:self action:@selector(RadioButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
   [self.scrollView addSubview:RadioButton];




  -(void)RadioButtonTapped:(id)sender
    {


       UIButton *RadioButton1 = (UIButton*)sender ;

      [self radiobuttonAction:RadioButton1];
    }

 -(void)radiobuttonAction:(UIButton *)Button
    {

       if(![Button isSelected])
         {


            [Button setSelected:YES]; 
            [Button setImage:[UIImage imageNamed:@"radio_active.png"] forState:UIControlStateSelected]; //not working, button image is not changing 
        } 
     else
        { 
            [Button setSelected:NO]; 
            [Button setImage:[UIImage imageNamed:@"radio_inactive.png"] forState:UIControlStateNormal];
        }


 }

以前に選択したボタンの画像はどこで変更できますか。

前もって感謝します

4

4 に答える 4

1

いずれかのボタンを選択したら、すべてのボタンの選択を解除します。スクロール ビューにボタンがある場合は、次のコードを使用できます。

//Your Method
-(void)RadioButtonTapped:(id)sender
{
  UIButton *RadioButton1 = (UIButton*)sender;
  [self deselectAll];
  [self radiobuttonAction:RadioButton1];      
}

- (void) deselectAll : (UIScrollView *) scrollView{
  NSArray *viewArray = [scrollView subviews];
  for (UIView *v in viewArray){
  if([v isKindOfClass:[UIButton class]]){
        [((UIButton *)v) setSelected:NO];
  }
 }
}

編集:しかし、実際のラジオボタン効果(常に1つが選択され、1つだけが選択される)を与えたい場合は、より簡単になります。次のコードを使用します。

 //A globle refButton
  UIButton *refButton = nil;
 //Set image for both state:
[RadioButton setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal];
[RadioButton setImage:[UIImage imageNamed:@"check.png"] forState:UIControlStateSelected];

 //make any of above default select: may be the last one and pass that to `refButton`
 refButton = RadioButton;



 //Your Method
-(void)RadioButtonTapped:(id)sender
{
  [refButton setSelected:NO];
  refButton = (UIButton*)sender;
  [refButton setSelected:YES];      
}
于 2012-07-03T05:39:42.970 に答える
0

作成時にボタンにタグを付けます。ボタンがタップされると、タグを介してボタンを取得します。すべてのボタンの選択を解除します。引数として受け取った現在のボタンを更新します。

于 2012-07-03T05:22:47.823 に答える
0

5 つのラジオ ボタンを追加するとします。

 - (void)viewDidLoad
 {
      for (int i = 0; i < 5; i++) {
           UIButton*  RadioButton = [UIButton buttonWithType:UIButtonTypeCustom];
           [RadioButton setFrame:CGRectMake(0.0f, 0.0f, 20, 20)];
           [RadioButton setCenter:CGPointMake(116.0, i * 40)];
           //        [RadioButton setTag:i * 10];
           [RadioButton setSelected:NO];
           [RadioButton setImage:[UIImage imageNamed:@"unCheck.png"] forState:UIControlStateNormal];
           [RadioButton addTarget:self action:@selector(RadioButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
           [self.scrollView addSubview:RadioButton];

     }
  }

//do not forget to declared this in your header file
-(void)RadioButtonTapped:(UIButton*)button;
 {
       for (UIButton *btn in self.scrollView.subviews) {
          [btn setImage:[UIImage imageNamed:@"unCheck.png"] forState:UIControlStateNormal];
         }
       [button setImage:[UIImage imageNamed:@"check.png"] forState:UIControlStateNormal];
 }

上記のコードは UI を更新し、すべてのボタンの画像を「チェック解除」に設定し、最後に押されたボタンの画像を「チェック」に変更します。

于 2012-07-03T05:38:37.637 に答える
-2

このようなボタンを作成し、

for(int i=0;i<4;i++)
{
 RadioButton = [UIButton buttonWithType:UIButtonTypeCustom];
 RadioButton.tag = i*100;
 [RadioButton setFrame:CGRectMake(0.0f, 0.0f, 20, 20)];
 [RadioButton setCenter:CGPointMake(116.0,p1)];
 [RadioButton setSelected:NO];
 [RadioButton setImage:[UIImage imageNamed:@"uncheck.png"] forState:UIControlStateNormal];
 [RadioButton addTarget:self action:@selector(RadioButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
 [self.scrollView addSubview:RadioButton];

}

このようなアクションを追加し、

-(void)radiobuttonAction:(UIButton *)Button
{

   UIButton *Button = (UIButton*)sender;
   for(UIButton * btn in self.scrollview.subViews)
   {
     if(btn.tag == Button.tag)
     {
        if(![Button isSelected])
        {
          [Button setSelected:YES]; 
          [Button setImage:[UIImage imageNamed:@"radio_active.png"] forState:UIControlStateSelected]; //not working, button image is not changing 
        } 
        else
        { 
          [Button setSelected:NO]; 
          [Button setImage:[UIImage imageNamed:@"radio_inactive.png"] forState:UIControlStateNormal];
        }
     }
     else
    {
      //do selected or de-selected code for other buttons

    }

}
于 2012-07-03T05:18:51.950 に答える