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 ^