【问题标题】:Xcode radio buttons- Changing background image of a button when another button is pressedXcode 单选按钮 - 按下另一个按钮时更改按钮的背景图像
【发布时间】:2014-06-06 18:01:17
【问题描述】:

我正在尝试实现自己的基本单选按钮,这样一次只能选择其中一个。 这是我正在使用的代码->

- (IBAction)btn2Pressed:(UIButton *)sender {
    [btn1 setBackgroundImage:[UIImage imageNamed:@"circle-uncheck.png"] forState:UIControlStateNormal];
    btn2pressed = YES;
    btn1pressed = NO;
}


- (IBAction)btn1Pressed:(UIButton *)sender {
    [btn2 setBackgroundImage:[UIImage imageNamed:@"circle-uncheck.png"] forState:UIControlStateNormal];
    btn1pressed = YES;
    btn2pressed = NO;
}

但它不起作用,即另一个按钮的图像没有改变。 :(

我无法弄清楚我做错了什么。

【问题讨论】:

  • btn1btn2 变量是什么?他们是 IBOutlets 吗?您确定它们与按钮相关联吗?
  • 是的,btn1 和 btn2 分别链接到 btn1Pressed 和 btn2Pressed IBActions。

标签: ios objective-c xcode xcode5


【解决方案1】:

当您按下 2 个按钮中的任何一个时,会将背景图像设置为 circle-uncheck.png。怎么改成checked?我猜它会永远保持unchecked

编辑(由于您在下面发表评论):

如果您最初在 Interface Builder 中设置背景图像,则只要按下按钮,它们就会更改为 circle-uncheck.png,并且它们显然永远不会设置为 checked状态。
您必须将代码修改为类似

- (IBAction)btn2Pressed:(UIButton *)sender {
    [btn1 setBackgroundImage:[UIImage imageNamed:@"circle-uncheck.png"] forState:UIControlStateNormal];
    [btn2 setBackgroundImage:[UIImage imageNamed:@"circle-check.png"] forState:UIControlStateNormal];
    btn2pressed = YES;
    btn1pressed = NO;
}

- (IBAction)btn1Pressed:(UIButton *)sender {
    [btn2 setBackgroundImage:[UIImage imageNamed:@"circle-uncheck.png"] forState:UIControlStateNormal];
    [btn1 setBackgroundImage:[UIImage imageNamed:@"circle-check.png"] forState:UIControlStateNormal];
    btn1pressed = YES;
    btn2pressed = NO;
}

【讨论】:

  • 我正在界面构建器属性检查器中设置背景图像。
  • 你是对的!感谢您指出这一点,我已经更改了我的代码,但背景图像仍然没有改变。 :(
  • 我假设您已更改我的代码 (UIImage imageNamed:@"circle-check.png") 以便使用您现有的“已检查”图像之一?
【解决方案2】:

如果您不想使用UISegmentedControl,我会创建一个IBOutletCollection 并将您的所有单选按钮链接到它。

@property(nonatomic, strong) IBOutletCollection(UIButton) NSArray *radioButtons;

在界面生成器中,我将设置一个选定状态背景图像和一个正常状态背景图像。

或者在代码中类似:

[btn1 setBackgroundImage:[UIImage imageNamed:@"circle-uncheck.png"] forState:UIControlStateNormal];
[btn1 setBackgroundImage:[UIImage imageNamed:@"circle-check.png"] forState:UIControlStateSelected];

然后我会创建一个控制函数:

-(IBAction)didSelectRadioButton:(id)sender
{
    for(UIButton *button in self.radioButtons){
        button.selected = NO;
    }

    UIButton *selectedButton = (UIButton *)sender;
    selectedButton.selected = YES;
}

使用 UIButtons 的简单收音机解决方案,可扩展:)

W

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2016-03-31
    • 2013-06-22
    • 2020-11-13
    相关资源
    最近更新 更多