ios - 在同一选项卡上的三个 UIButton 之间切换 selectedState

标签 ios xcode uibutton

我在同一个选项卡上有 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/

相关文章:

jquery - 如何制作常规按钮的 jQuery 按钮集

ios - 动画 UIButton 的文本以捏合和捏开不起作用

ios - NSArray、NSData、NSMutuableArray 中的对象大小限制?

ios - 如何为倒数计时器创建循环进度指示器

xcode - 在 Xcode 中为预先存在的项目设置一个 git 存储库

ios - 在 xcode "\\\\\\\"$(SRCROOT)/myprojectname\\\\\\\"中的库搜索路径中,所有这些反斜杠是什么意思?

swift - 使用委托(delegate)更改带有按钮的 tableViewCell 内 UITextField 的值

ios - gpus_ReturnNotPermittedKillClient 应用后台运行时 MKMapView 抛出错误

ios - 使用 AFNetworking 重置基本身份验证凭据

objective-c - 释放 UIViewController 子类实际上并没有释放内存