繁体   English   中英

iOS如何重置按钮图像?

[英]iOS how do I reset button images?

我有几个按钮,当按下它们时,它们会从一个普通按钮变为带有刻度线的按钮。 我的问题是,当按下一个单独的按钮时,我无法使打勾的按钮回到未折叠的按钮。 这有可能吗?

这是我的按钮:

    - (IBAction)pickCat:(UIButton *)sender {

    [self deselectAllButtons];

    ((UIButton *)sender).selected = true;

    UIImage *btnImage1 = [UIImage imageNamed:@"white - on.png"];
    [sender setImage:btnImage1 forState:UIControlStateNormal];



    self.catLabel.text = @"WHITE (Hi-Po)";

}
- (IBAction)pickCatb:(UIButton *)sender {

    [self deselectAllButtons];

    ((UIButton *)sender).selected = true;

    UIImage *btnImage1 = [UIImage imageNamed:@"red - on.png"];
    [sender setImage:btnImage1 forState:UIControlStateNormal];


    self.catLabel.text = @"RED (Significant)";

}
- (IBAction)pickCatc:(id)sender {

    UIImage *btnImage1 = [UIImage imageNamed:@"yellow - on.png"];
    [sender setImage:btnImage1 forState:UIControlStateNormal];

    self.catLabel.text = @"YELLOW (Serious)";

}
- (IBAction)pickCatd:(id)sender {

    UIImage *btnImage1 = [UIImage imageNamed:@"green - on.png"];
    [sender setImage:btnImage1 forState:UIControlStateNormal];

    self.catLabel.text = @"GREEN (Important)";

}
- (void)deselectAllButtons
{
    // assuming you have a reference to all your buttons
    self->Btn1.selected = false;
    self->Btn2.selected = false;

}

我喜欢为每种状态设置不同的图像:正常和选中。 看起来您正在使用Interface Builder,并且很容易为正常和选定状态的按钮设置不同的图像。

在此处输入图片说明

然后,您可以在代码中执行以下操作:

- (IBAction)pickImage:(id)sender {

    [self deselectAllButtons];

    sender.selected = true;

    self.locLabel.text = @"Red";

}
- (IBAction)pickImageb:(id)sender {

    [self deselectAllButtons];

    sender.selected = true;

    self.locLabel.text = @"Red";

}

- (void)deselectAllButtons
{
    // assuming you have a reference to all your buttons
    self.btn1.selected = false;
    self.btn2.selected = false;
    ...
}

如果希望能够在将一个按钮更改为选中的图像之前重设所有按钮,则必须参考要影响的其他所有内容。 如果想花哨的话,请查看插座集合,以便您可以轻松地从IB文件中遍历按钮阵列,并将其选择状态设置为false。

更新:

这可能是您的代码的外观:

- (IBAction)pickCat:(UIButton *)sender {
    [self deselectAllButtons];

    // no need to cast since you changed your method signature.
    // the system now expects sender to be a button
    // ((UIButton *)sender).selected = true;
    sender.selected = true;

    // no need to set the image explicitly. if you did things correctly
    // in IB, you've already told the button which image to use when
    // selected, and which image to use when not (default). when you set
    // the line above (sender.selected = true), that will tell the button
    // to go use the image that you added to the button's selected state in IB
    // UIImage *btnImage1 = [UIImage imageNamed:@"white - on.png"];
    // [sender setImage:btnImage1 forState:UIControlStateNormal];

    self.catLabel.text = @"WHITE (Hi-Po)";
}

- (IBAction)pickCatb:(UIButton *)sender {
    [self deselectAllButtons];

    sender.selected = true;

    self.catLabel.text = @"RED (Significant)";
}

- (IBAction)pickCatc:(id)sender {
    [self deselectAllButtons];

    sender.selected = true;

    self.catLabel.text = @"YELLOW (Serious)";
}

- (IBAction)pickCatd:(id)sender {
    [self deselectAllButtons];

    sender.selected = true;

    self.catLabel.text = @"GREEN (Important)";

}
- (void)deselectAllButtons

{
    // 2 things:
    // 1) I'm not sure about self->Btn1. why not self.Btn1? 
    // 2) it looks like you have 4 buttons (catA, catB, catC, catD). if so, you need to set the selected state for all of them to false
    self->Btn1.selected = false;
    self->Btn2.selected = false;

    self->Btn3.selected = false;
    self->Btn4.selected = false;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM