ios中有多个单选button

我有四个不同的收音机用于不同的目的。 我为所有四个添加了相同的select器。 而在select器方法中,我已经编写了所有四种单选button的代码。 所以它增加了行数。 那么编写相同代码的最好方法是什么?

(void)checkBoxSelected:(id)sender{ switch ([sender tag]) { case 1: if([checkBoxDisel isSelected]==YES) { [checkBoxDisel setSelected:NO]; [checkBoxPetrol setSelected:NO]; } else{ [checkBoxDisel setSelected:YES]; [checkBoxPetrol setSelected:NO]; } break; case 2: if([checkBoxPetrol isSelected]==YES) { [checkBoxPetrol setSelected:NO]; [checkBoxDisel setSelected:NO]; } else{ [checkBoxPetrol setSelected:YES]; [checkBoxDisel setSelected:NO]; } break; case 3: if([checkBoxYes isSelected]==YES) { [checkBoxYes setSelected:NO]; [checkBoxNo setSelected:NO]; } else{ [checkBoxYes setSelected:YES]; [checkBoxNo setSelected:NO]; } break; case 4: if([checkBoxNo isSelected]==YES) { [checkBoxNo setSelected:NO]; [checkBoxYes setSelected:NO]; } else{ [checkBoxNo setSelected:YES]; [checkBoxYes setSelected:NO]; } break; case 5: if([checkBoxMale isSelected]==YES) { [checkBoxMale setSelected:NO]; [checkBoxFemale setSelected:NO]; } else{ [checkBoxMale setSelected:YES]; [checkBoxFemale setSelected:NO]; } break; case 6: if([checkBoxFemale isSelected]==YES) { [checkBoxFemale setSelected:NO]; [checkBoxMale setSelected:NO]; } else{ [checkBoxFemale setSelected:YES]; [checkBoxMale setSelected:NO]; } break; default: break; } } 

以下几行:

 if([checkBoxYes isSelected]==YES) { [checkBoxYes setSelected:NO]; [checkBoxNo setSelected:NO]; } else{ [checkBoxYes setSelected:YES]; [checkBoxNo setSelected:NO]; } 

可以改写为

 checkBoxYes.selected = !checkBoxYes.selected; checkBoxNo.selected = NO; 

对于你巨大的switch每一种情况也是如此。

你有没有考虑过使用分段控制?

首先,iOS中的单选button是分段控件。

如果您想使用自己的button,我build议使用IBOutletCollection而不是简单的IBOutlet 。 因此,你将不会有4个不同名称的button,你将有一个数组与button,你可以迭代通过数组,并设置选定的状态,并取消select其他。

  for (UIButton *radioButton in radioButtons) { if (radioButton.tag == [sender tag]) { [radioButton setSelected:YES]; } else { [radioButton setSelected:NO]; } } 

其中radioButtons是包含单选button的IBOutletCollection数组。

此外,创build一个分离的对象(如YZRadioControl)将是理想的,它将包含button并负责pipe理select。 当然,这将是可定制的。 像这个或这个或者也许这个或者这个 …

祝你好运!

在发件人中,您可以访问button:

  UIButton* myButton = (UIButton*)sender; 

简单的方法遍历所有的UIbutton对象,并设置为禁用,并启用此button。

 -(void)checkBoxSelected:(id)sender{ for (UIButton *radioButton in radioButtons) { [radioButton setSelected:NO]; } UIButton* myButton = (UIButton*)sender; [myButton setSelected:YES]; //or //[sender setSelected:YES]; } 

variablesradioButtons包含所有的UIButton对象。