Xcode单选button – 当另一个button被按下时,改变button的背景图像

我试图实现我自己的基本单选button,以便一次只能select其中的一个。 这是我正在使用的代码 – >

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

但它不起作用,即另一个button的图像没有改变。 🙁

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

当您按下任何2个button时,您将背景图像设置为circle-uncheck.png 。 如何改变checked ? 我想,它将永远unchecked

编辑 (由于你下面的评论):

如果您最初在Interface Builder中设置了背景图像,只要按下button,它们就会更改为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; } 

如果你不想使用一个UISegmentedControl ,我会创build一个IBOutletCollection并将所有的单选button连接到它。

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

然后我会创build一个控制function:

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

一个简单的使用UIButtons的无线电解决scheme,并且可扩展性:)

w ^