ios中的多个单选按钮

时间:2015-08-11 07:48:39

标签: ios objective-c iphone

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

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

3 个答案:

答案 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),该对象将包含按钮并负责管理选择。当然它可以定制。与thisthisthisthis一样......

祝你好运!

答案 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对象。

相关问题