我有四种不同的收音机用于不同的目的。我为所有四个添加了相同的选择器。在选择器方法中,我已经为所有四种类型的单选按钮编写了代码。所以它增加了行数。那么编写相同代码的最佳方法是什么。
(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;
}
}
答案 0 :(得分:3)
以下几行:
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
中的每一个案例都是如此。
您是否考虑过使用分段控件?
答案 1 :(得分:2)
首先,iOS中的单选按钮替代方案是分段控件。
如果您想使用自己的按钮,建议您使用IBOutletCollection
代替简单IBOutlet
。因此,您将不会有4个不同名称的不同按钮,您将拥有一个带按钮的数组,您可以遍历数组并将所选数据设置为“已选定”状态,并取消选择其他状态。
for (UIButton *radioButton in radioButtons) {
if (radioButton.tag == [sender tag]) {
[radioButton setSelected:YES];
}
else {
[radioButton setSelected:NO];
}
}
radioButtons
是包含单选按钮的IBOutletCollection
数组。
此外,最理想的是创建一个分离的对象(称为YZRadioControl),该对象将包含按钮并负责管理选择。当然它可以定制。与this或this或this或this一样......
祝你好运!
答案 2 :(得分:1)
在发件人中,您可以访问按钮:
UIButton* myButton = (UIButton*)sender;
简单方法是遍历所有UI按钮对象并设置为禁用并启用此按钮。
-(void)checkBoxSelected:(id)sender{
for (UIButton *radioButton in radioButtons) {
[radioButton setSelected:NO];
}
UIButton* myButton = (UIButton*)sender;
[myButton setSelected:YES];
//or
//[sender setSelected:YES];
}
变量radioButtons包含所有UIButton对象。