ios中我们可能需要用到多个按钮单选的情况,类似于C#中的ButtonGroup,我遇到的情况是按钮比较大,是一张图片,多个带图片按钮提供选择,只能选择一个按钮,选择另一个按钮后,原来选中的按钮就会取消选中。
利用UIButton的两个State设置选中和未选中时不同的图片:
UIControlStateNormal 设置为image1.png
UIControlStateSelected 设置为image2.png
selectedButton表示当前选中的按钮,未选中设为nil
按钮被选中函数触发后,判断selectedButton是否是当前按的按钮, 若是将当前的按钮的selected属性设为No, 并将selectedButton设为nil. 若不是当前按的按钮, 将selectedButton的selected属性设为No, 当前按钮的selected属性设为YES,并将selctedButton设为当前按钮, 若selectedButton为nil, 则将当前按钮的slected属性设为YES, slectedButton设为当前按钮.
代码如下:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[self.button1 setImage:[UIImage imageNamed:@"elephant1.png"] forState:UIControlStateNormal];
[self.button1 setImage:[UIImage imageNamed:@"elephant2.png"] forState:UIControlStateSelected];
[self.button1 addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];
[self.button2 setImage:[UIImage imageNamed:@"cow1.png"] forState:UIControlStateNormal];
[self.button2 setImage:[UIImage imageNamed:@"cow2.png"] forState:UIControlStateSelected];
[self.button2 addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];
[self.button3 setImage:[UIImage imageNamed:@"elephant1.png"] forState:UIControlStateNormal];
[self.button3 setImage:[UIImage imageNamed:@"elephant2.png"] forState:UIControlStateSelected];
[self.button3 addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];
[self.button4 setImage:[UIImage imageNamed:@"cow1.png"] forState:UIControlStateNormal];
[self.button4 setImage:[UIImage imageNamed:@"cow2.png"] forState:UIControlStateSelected];
[self.button4 addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];
}
- (void)clickButton:(UIButton*)button{
if (selectedButton != nil) {
[selectedButton setSelected:NO];
}
if (selectedButton == button) {
[button setSelected:NO];
selectedButton = nil;
}
else{
[button setSelected:YES];
selectedButton = button;
}
}