2012-07-03 4 views
0

Я динамически создал список RadioButtons с некоторыми значениями. про грамматически я изменил состояние кнопки и изменил изображение для выбранного и невыбранного. но проблема в том, что я могу одновременно выбрать все радиобаты. на самом деле мне нужно выбрать один за раз. Когда я нажал следующий RadioButton, предварительно выбранное состояние кнопки должно быть изменено на не выбранное.пользовательский RadioButton, выбранный по одному за iphone?

Вот мой код, я пробовал с меняющимся изображением, но ... некоторые проблемы с моим кодом.

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]; 
     } 


} 

где можно изменить изображение ранее выбранной кнопки.

заранее спасибо

+0

Как насчет создания розетки на кнопке, например, у вас есть 3 кнопки, сделайте 3 розетки, так что это может быть легко сделать вашу проблему. – Bazinga

+0

но я создал кнопки динамически, – neerajPK

+0

'RadioButtonTapped'-- в этом вы используете это в каждой кнопке? – Bazinga

ответ

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]; 
    } 
} 
} 

EDIT: Но если вы хотите, чтобы придать ему реальное радио кнопки эффекта (в которой один всегда выбран, и только один выбран) вам будет легче. Используйте следующий код:

//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];  
} 
+0

ОК, это отлично работает .. спасибо за вашу обратную связь .... ,, – neerajPK

+0

, но еще одно сомнение в том, что значение nsloged тэга NSLog (@ "% d", refButton.tag) ;, но значение тега отображается всегда 0. поскольку мне нужно значение тега для извлечения соответствующих данных, как это возможно – neerajPK

+0

вы добавили значения тегов к своим кнопкам при их добавлении? Если нет, тогда сделайте это. Тогда дайте мне знать, если проблема не исчезнет. – rptwsthi

-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 

    } 

} 
+0

не могли бы вы объяснить, почему вы изменили тег на RadioButton.tag = i * 100; , и каков должен быть результат? – neerajPK

+0

Я думаю, что это не решение .. дорогой .. – rptwsthi

+0

да, его уже в петле. – neerajPK

0

Tag кнопку в момент создания. Когда кнопка нажата, запустите кнопки с помощью тега. Отмените выбор всех кнопок. Обновить текущую кнопку, которую вы получили как n аргумент.

+1

ладно, это заставляет меня думать, спасибо. – neerajPK

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]; 
} 

выше код обновляет интерфейс, задает образ всех кнопок «снимите флажок» затем меняет образ последней нажатой кнопку «проверить».

+0

thankyou за ваши отзывы, он работает с решением rptwsthis. – neerajPK

Смежные вопросы