Iphone 3按钮选择

Iphone 3按钮选择,iphone,ios6,uibutton,Iphone,Ios6,Uibutton,在我的应用程序中,我有3个按钮,当选择任何1个按钮时,我想禁用剩下的2个按钮,我尝试了以下逻辑,这里是我用来执行它的代码,但工作不正常 -(void)checkboxSelected13:(id)sender { UIButton *btn = (UIButton *) sender; if([btn isSelected]) { [bt27 setSelected:YES]; [bt28 setSel

在我的应用程序中,我有3个按钮,当选择任何1个按钮时,我想禁用剩下的2个按钮,我尝试了以下逻辑,这里是我用来执行它的代码,但工作不正常

 -(void)checkboxSelected13:(id)sender
 {
       UIButton *btn = (UIButton *) sender;
       if([btn isSelected])
       {
            [bt27 setSelected:YES];
            [bt28 setSelected:NO];
            [bt29 setSelected:NO];
       }
       else if ([btn isSelected]) {
            [bt27 setSelected:NO];
            [bt28 setSelected:YES];
            [bt29 setSelected:NO];
       }
       else
       {
            [bt27 setSelected:NO];
            [bt28 setSelected:NO];
            [bt29 setSelected:YES];
       }
}
我的代码有什么问题?请帮忙

if([btn isSelected]
   )
{
    [bt27 setSelected:YES];
    [bt28 setSelected:NO];
    [bt29 setSelected:NO];
}
else if ([btn isSelected]) {
    [bt27 setSelected:NO];
    [bt28 setSelected:YES];
    [bt29 setSelected:NO];
}
...

您在if和else if中检查相同的条件[btn isSelected],请更改其中一个条件。

您应该这样做,并将不同的图像作为xib文件中按钮选定状态的背景图像,以便轻松区分

-(void)checkboxSelected13:(id)sender
 {

UIButton *btn = (UIButton *) sender;

if((btn == bt27) && ![btn isSelected])
{
    [bt27 setSelected:YES];
    [bt28 setSelected:NO];
    [bt29 setSelected:NO];
}
else if ((btn == bt28) && ![btn isSelected]) {
    [bt27 setSelected:NO];
    [bt28 setSelected:YES];
    [bt29 setSelected:NO];
}
else if ((btn == bt29) && ![btn isSelected])
{
    [bt27 setSelected:NO];
    [bt28 setSelected:NO];
    [bt29 setSelected:YES];

}
}

为按钮指定选项卡。然后检查:

-(void)checkboxSelected13:(id)sender
 {
      UIButton *btn = (UIButton *) sender;
      if(btn.tag == tagAssignedToButton27)
      {
           [bt27 setSelected:YES];
           [bt28 setSelected:NO];
           [bt29 setSelected:NO];
      }
      else if(btn.tag == tagAssignedToButton28)
      {
           [bt27 setSelected:NO];
           [bt28 setSelected:YES];
           [bt29 setSelected:NO];
      }
      else if(btn.tag == tagAssignedToButton29)
      {
           [bt27 setSelected:NO];
           [bt28 setSelected:NO];
           [bt29 setSelected:YES];
      }
}
更优化的方法是在函数中使用开关盒
复选框selected13

if([bt27 isSelected]) {
    [bt27 setSelected:YES];
    [bt28 setSelected:NO];
    [bt29 setSelected:NO];
} else if ([bt28 isSelected]) {
    [bt27 setSelected:NO];
    [bt28 setSelected:YES];
    [bt29 setSelected:NO];
} else if ([bt29 isSelected]) {
    [bt27 setSelected:NO];
    [bt28 setSelected:NO];
    [bt29 setSelected:YES];
} else {
    [bt27 setSelected:NO];
    [bt28 setSelected:NO];
    [bt29 setSelected:NO];
}

从逻辑上讲,这就是你想要的。目前还不清楚btn和btXY之间的关系。

这里的主要问题是逻辑和代码重复。尽管另一种类型的控件最适合您所追求的内容(例如
UISegmentedControl
),但您可以尝试用更抽象的想法来解决相同的问题,可能是这样的(请注意,所有按钮现在都触发相同的方法):


您在if-else部分中检查相同的条件“if([btn isSelected])。这可能会引起混乱。您的代码无法正常工作

您的代码看起来太长,而且很复杂:

您可以直接执行:

为按钮指定标签属性,如button1=1、button2=2和button3=3

现在检查以下代码:

-(IBAction)checkboxSelected:(id)sender
{
    UIButton *btn = (UIButton *) sender;

    switch (btn.tag) {
    case 1:
        [btn1 setSelected:YES];
        [btn2 setSelected:NO];
        [btn3 setSelected:NO];
        break;
    case 2:
        [btn1 setSelected:NO];
        [btn2 setSelected:YES];
        [btn3 setSelected:NO];
        break;
    case 3:
        [btn1 setSelected:NO];
        [btn2 setSelected:NO];
        [btn3 setSelected:YES];
        break;
    default:
        [btn1 setSelected:NO];
        [btn2 setSelected:NO];
        [btn3 setSelected:NO];
        break;
    }
}
希望这会对你有所帮助


干杯

您可能需要一个UISegmentedControl或一个单选组。问题是,您的按钮和方法的名称很难理解。
-(IBAction)checkboxSelected:(id)sender
{
    UIButton *btn = (UIButton *) sender;

    switch (btn.tag) {
    case 1:
        [btn1 setSelected:YES];
        [btn2 setSelected:NO];
        [btn3 setSelected:NO];
        break;
    case 2:
        [btn1 setSelected:NO];
        [btn2 setSelected:YES];
        [btn3 setSelected:NO];
        break;
    case 3:
        [btn1 setSelected:NO];
        [btn2 setSelected:NO];
        [btn3 setSelected:YES];
        break;
    default:
        [btn1 setSelected:NO];
        [btn2 setSelected:NO];
        [btn3 setSelected:NO];
        break;
    }
}