0

我已经在我的一个应用程序上实现了一个单选按钮,就像这个解决方案一样:

http://www.developers-life.com/radio-buttons-in-iphone-application.html

但我的 checkboxButton 方法是这样的:

- (IBAction)checkboxButton:(UIButton *)button{

     for (UIButton *but in self.arrayButtons) {
         if (but == button)
             [but setSelected:YES];
         else
             [but setSelected:NO];
     }
}

我有两个属于同一个单选按钮组的按钮。当我选择其中一个按钮时,其图像会切换到已切换的按钮。完美的。问题是,当我选择另一个时,它不会选择选择状态,并且显示为选中的第一个继续显示为选中状态。

任何线索?

4

5 回答 5

7
for (UIButton *but in [Your_View subviews]) {

if ([but isKindOfClass:[UIButton class]] && ![but isEqual:button]) {

            [but setSelected:NO];

        }

}

if (!button.selected)  {

        button.selected = !button.selected;
    }
于 2012-09-04T12:37:47.553 回答
0

你为什么要使用这么复杂的只是使用下面来选择..

- (IBAction)checkboxButton:(UIButton *)button
{
    button.selected = !button.selected;
}

并确保您的按钮图像根据需要在每个状态的 xib 中设置。

于 2012-09-04T12:28:32.320 回答
0

为了实现所需的功能,您必须在下一个运行循环中选择按钮。

因此,从“checkboxButton:”调用另一个方法。

做类似的事情,

- (IBAction)checkboxButton:(UIButton *)button
{
    [self performSelector:@selector(highlighButton:) withObject:button afterDelay:0.0];
}

其中“highlightButton:”定义为:

-(void) highlighButton:(UIButton*)aButton
{
    [aButton setHighlighted:YES];
    for (UIButton* button in self.arrayButtons) {
        if (button != aButton) {
            [button setHighlighted:NO];
        }
    }
}
于 2012-09-04T12:31:44.167 回答
0

我只是做了一些细微的调整,我刚刚测试了它并且它有效。

viewDidLoad: //确保所有按钮都分配了相同的选择器

[button1 addTarget:self action:@selector(checkboxButton:) forControlEvents:UIControlEventTouchUpInside];
[button2 addTarget:self action:@selector(checkboxButton:) forControlEvents:UIControlEventTouchUpInside];
[button3 addTarget:self action:@selector(checkboxButton:) forControlEvents:UIControlEventTouchUpInside];

然后只需稍微修改循环以扫描按钮子视图而不是任意数组中的对象(应该更准确)

- (IBAction)checkboxButton:(UIButton *)button{

    for (UIButton *but in self.view.subviews) {//Change "self.view" to what ever view you are adding these subviews to.
        if (but == button){
            [but setSelected:YES];
        }else{
            [but setSelected:NO];
        }
    }
}

请记住,您分配的选定状态图像/文本在释放按钮之前不会出现。当按钮在释放之前被按下时,它处于突出显示状态。这只是一个注释,因此您可以相应地进行设置。

于 2012-09-04T14:00:37.573 回答
0

在尝试了这里给出的所有解决方案并且都失败了之后,我尝试了一种新的方法并且效果很好。

解决方案是改变这个

- (IBAction)checkboxButton:(UIButton *)button{

     for (UIButton *but in self.arrayButtons) {
         if (but == button)
             [but setSelected:YES];
         else
             [but setSelected:NO];
     }
}

对此

- (IBAction)checkboxButton:(UIButton *)button{

     for (UIButton *but in self.arrayButtons) {
         if (but == button)
             [but setImage:selectedImage forState:UIControlStateNormal];
         else
             [but setImage:normalImage forState:UIControlStateNormal];
     }
}

显然,改变按钮的状态不会改变它的形象。至少对我没有用。

于 2012-09-05T01:26:00.207 回答