苹果手机 。按钮图像不切换

时间:2012-09-04 12:21:55

标签: iphone ios ipad

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

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

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

任何线索?

5 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:0)

为什么你使用如此复杂的只是使用下面的选项..

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

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

答案 2 :(得分: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];
        }
    }
}

答案 3 :(得分: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];
        }
    }
}

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

答案 4 :(得分: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];
     }
}
显然,改变按钮状态不会改变其图像。至少对我不起作用。