Ios 在同一选项卡上的三个UI按钮之间切换selectedState

Ios 在同一选项卡上的三个UI按钮之间切换selectedState,ios,xcode,uibutton,Ios,Xcode,Uibutton,我在同一选项卡上有3个UI按钮。 问题: 当我点击按钮1、按钮2和按钮3时,它们都被选中;然而,我想要的是,当我选择(例如)按钮2时,其他按钮将被取消选择(如html上的单选按钮)。 你知道我如何解决这个问题吗 这是我的代码: 您已经更改了所选按钮的选定状态,您还需要更改所有其他按钮状态。有两种简单的解决方案。也许它们不是最优的,但您可以使用它们: - (IBAction)button1:(UIButton *)sender { btn1.selected = YES; btn2

我在同一选项卡上有3个UI按钮。

问题: 当我点击按钮1、按钮2和按钮3时,它们都被选中;然而,我想要的是,当我选择(例如)按钮2时,其他按钮将被取消选择(如html上的单选按钮)。 你知道我如何解决这个问题吗

这是我的代码:


您已经更改了所选按钮的选定状态,您还需要更改所有其他按钮状态。

有两种简单的解决方案。也许它们不是最优的,但您可以使用它们:

- (IBAction)button1:(UIButton *)sender {
    btn1.selected = YES;
    btn2.selected = NO;
    btn3.selected = NO;

 }
- (IBAction)button2:(UIButton *)sender {

    btn1.selected = NO;
    btn2.selected = YES;
    btn3.selected = NO;
 }
- (IBAction)button3:(UIButton *)sender {
    btn1.selected = NO;
    btn2.selected = NO;
    btn3.selected = YES;
 }
第一个解决方案:

将按钮链接到相应的属性:

@property (weak, nonatomic) IBOutlet UIButton *button1;
@property (weak, nonatomic) IBOutlet UIButton *button2;
@property (weak, nonatomic) IBOutlet UIButton *button3;
在每个操作中,更改每个按钮的选定属性:

- (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;
第三种解决方案:

可以更改每个按钮的标记属性(通过界面生成器或代码):

然后用一个动作链接所有按钮(与上一个示例中相同):

第四种解决方案:(作者@velmurugan-s)

对所有按钮使用一个操作,并将其默认状态设置为selected=NO:

摘要:


我建议您使用第二种解决方案作为最佳解决方案。

您可以做的是将button1、button2、button3连接到界面部分中的同一个button123,并给它们适当的标签

-(iAction)按钮123:(UIButton*)发送器

在其描述中使用以下代码

- (IBAction)button123:(UIButton *)sender {

if (sender.tag == 111)
{
    sender.selected = !sender.selected;

    if (sender.selected)
    {
        self.button2.selected = NO;
        self.button3.selected = NO;


    }

}
else if (sender.tag == 222)
{
    sender.selected = !sender.selected;

    if (sender.selected)
    {
       self.button1.selected = NO;
        self.button3.selected = NO;

    }


}
else if (sender.tag == 333)
{
    sender.selected = !sender.selected;

    if (sender.selected)
    {
      self.button1.selected = NO;
        self.button2.selected = NO;

    }

}

点击按钮,用同样的方法设置选中和取消选中。非常感谢您的帮助!我现在尝试第一个解决方案,但它在这行中显示button1.selected=YES;button1是一个未声明的标识符,为什么?您将按钮与属性链接了吗?只需按住ctrl键并将每个按钮拖动到相应的属性。现在就可以了!我用按钮1替换了按钮1,现在一切都好了!非常感谢你的帮助!!你救了我一天!!感谢您的帮助,我真的很感激,@etolstoy solution与您合作。所以我没有试过你的解决办法。无论如何谢谢你!!感谢您的帮助,我真的很感激,@etolstoy solution与您合作。所以我没有试过你的解决办法。无论如何谢谢你!!
_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;
    } 
}
- (IBAction)buttonClicked:(UIButton *)sender {
    _button1.selected = NO;
    _button2.selected = NO;
    _button3.selected = NO;

    sender.selected = YES;
}
- (IBAction)button123:(UIButton *)sender {

if (sender.tag == 111)
{
    sender.selected = !sender.selected;

    if (sender.selected)
    {
        self.button2.selected = NO;
        self.button3.selected = NO;


    }

}
else if (sender.tag == 222)
{
    sender.selected = !sender.selected;

    if (sender.selected)
    {
       self.button1.selected = NO;
        self.button3.selected = NO;

    }


}
else if (sender.tag == 333)
{
    sender.selected = !sender.selected;

    if (sender.selected)
    {
      self.button1.selected = NO;
        self.button2.selected = NO;

    }

}