我在同一个选项卡上有 3 个 UIButton。
问题: 当我点击按钮1、按钮2和按钮3时,它们全部被选中;然而我想要的是当我选择(例如)button2时,其他按钮被取消选择(如html上的单选按钮)。 关于如何解决这个问题有什么想法吗?
这是我的代码:
- (IBAction)button1:(UIButton *)sender { sender.selected = !sender.selected; } - (IBAction)button2:(UIButton *)sender { sender.selected = !sender.selected; } - (IBAction)button3:(UIButton *)sender { sender.selected = !sender.selected; }
最佳答案
有几个简单的解决方案。也许它们不是最佳的,但您可以使用它们:
第一个解决方案:
将按钮与相应的属性链接起来:
@property (weak, nonatomic) IBOutlet UIButton *button1;
@property (weak, nonatomic) IBOutlet UIButton *button2;
@property (weak, nonatomic) IBOutlet UIButton *button3;
在每个操作中更改每个按钮的selected属性:
- (IBAction)button1Clicked:(UIButton *)sender {
_button1.selected = YES;
_button2.selected = NO;
_button3.selected = NO;
}
第二种解决方案:
将所有按钮添加到 NSArray 中:
NSArray *buttonsArray = [[NSArray alloc] initWithObjects: button1, button2, button3, nil];
然后通过一个操作链接所有按钮:
- (IBAction)buttonClicked:(UIButton *)sender {
for (UIButton *btn in _buttonsArray) {
if (btn == sender)
btn.selected = YES;
else
btn.selected = NO;
}
}
不要忘记让你的 NSArray 可供类的所有方法访问,例如通过创建相应的属性:
@property (weak, nonatomic) NSArray *buttonsArray;
第三种解决方案:
您可以更改每个按钮的标签属性(通过 Interface Builder 或在代码中):
_button1.tag = 1;
_button2.tag = 2;
_button3.tag = 3;
然后通过一个操作链接所有按钮(就像前面的示例一样):
- (IBAction)buttonClicked:(UIButton *)sender {
if (sender.tag == 1) {
_button1.selected = YES;
_button2.selected = NO;
_button3.selected = NO;
} else if (sender.tag == 2) {
_button1.selected = NO;
_button2.selected = YES;
_button3.selected = NO;
} else if (sender.tag == 3) {
_button1.selected = NO;
_button2.selected = NO;
_button3.selected = YES;
}
}
第四种解决方案:(作者:@velmurugan-s)
对所有按钮使用一个操作,并将其默认状态设置为已选择=否:
- (IBAction)buttonClicked:(UIButton *)sender {
_button1.selected = NO;
_button2.selected = NO;
_button3.selected = NO;
sender.selected = YES;
}
摘要:
我建议您使用第二种解决方案作为最佳解决方案。
关于ios - 在同一选项卡上的三个 UIButton 之间切换 selectedState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21452443/