【问题标题】:Change Button text and Background Color when clicked in IOS在 IOS 中单击时更改按钮文本和背景颜色
【发布时间】:2017-07-17 13:57:02
【问题描述】:

我知道这个问题经常被问到,我已经应用了很多代码,但仍然没有得到解决方案。

我有三个单选按钮,当我选择 radiobutton1 时它显示显示按钮,现在我希望当用户单击 radiobutton1 它显示按钮时,第一个按钮是预先选择的,如果用户想从中选择其他按钮选项按钮背景颜色和文本颜色应该改变。

我正在尝试一些代码,但只更改了第一个按钮的颜色,它不会更改其他按钮的颜色。我的代码是:

-(void)btnClick:(UIButton *)sender{

    switch (sender.tag) {
        case 1:
            if ([rd1 isSelected]==YES ) {

                [rd1 setSelected:YES];
            }
            else{
                [rd1 setSelected:YES];

                [rd2 setSelected:NO];

                [rd3 setSelected:NO];

                _house.hidden=NO;

                _flat.hidden=NO;

                _upperP.hidden=NO;

                _lowerP.hidden=NO;

                _farmH.hidden=NO;

                _roomB.hidden=NO;

                _pentH.hidden=NO;

                _resident.hidden=YES;

                _commercial.hidden=YES;

                _agricult.hidden=YES;


                _industry.hidden=YES;

                _plot.hidden=YES;

                _plotF.hidden=YES;

                _office.hidden=YES;

                _shop.hidden=YES;

                _wareH.hidden=YES;

                _factory.hidden=YES;

                _building.hidden=YES;

                _other.hidden=YES;

                if ([_house isSelected]==YES) {

                    House=_house.titleLabel.text;

                    NSLog(@"Button is %@",House);

                    _flat.enabled=NO;

                    _upperP.enabled=NO;

                    _lowerP.enabled=NO;

                    _farmH.enabled=NO;

                    _roomB.enabled=NO;

                    _pentH.enabled=NO;

                }

                else if ([_flat isSelected]==YES) {

                    _house.enabled=NO;

                    _upperP.enabled=NO;

                    _lowerP.enabled=NO;

                    _farmH.enabled=NO;

                    _roomB.enabled=NO;

                    _pentH.enabled=NO;


                }

                [self BgColor];


            }
            break;

        case 2:
            if ([rd2 isSelected]==YES ) {

                [rd2 setSelected:NO];
            }
            else{
                [rd2 setSelected:YES];

                [rd1 setSelected:NO];

                [rd3 setSelected:NO];

                _resident.hidden=NO;

                _commercial.hidden=NO;

                _agricult.hidden=NO;

                _industry.hidden=NO;

                _plot.hidden=NO;

                _plotF.hidden=NO;

                _house.hidden=YES;

                _flat.hidden=YES;

                _upperP.hidden=YES;

                _lowerP.hidden=YES;

                _farmH.hidden=YES;

                _roomB.hidden=YES;

                _pentH.hidden=YES;

                _shop.hidden=YES;

                _wareH.hidden=YES;

                _factory.hidden=YES;

                _building.hidden=YES;


                _other.hidden=YES;

                _office.hidden=YES;




            }
            break;

        case 3:
            if ([rd3 isSelected]==YES ) {

                [rd3 setSelected:NO];
            }
            else{
                [rd3 setSelected:YES];

                [rd2 setSelected:NO];

                [rd1 setSelected:NO];

                _office.hidden=NO;

                _shop.hidden=NO;

                _wareH.hidden=NO;

                _factory.hidden=NO;

                _building.hidden=NO;

                _other.hidden=NO;

                _house.hidden=YES;

                _flat.hidden=YES;

                _upperP.hidden=YES;

                _lowerP.hidden=YES;

                _farmH.hidden=YES;

                _roomB.hidden=YES;

                _pentH.hidden=YES;
                _resident.hidden=YES;

                _commercial.hidden=YES;

                _agricult.hidden=YES;

                _industry.hidden=YES;

                _plot.hidden=YES;

                _plotF.hidden=YES;

            }
            break;

        default:
            break;
    }

}

-(void)BgColor{

    if ([_house isSelected]==YES) {

        [_house setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

        _house.backgroundColor=[UIColor redColor];

    }
    else if (([_flat isSelected]==YES)){

        [_flat setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

        _flat.backgroundColor=[UIColor redColor];
    }
}

【问题讨论】:

    标签: ios objective-c button


    【解决方案1】:

    一个可能的问题是您只在case 1: 块内调用[self BgColor];。由于该方法似乎处理了 house 和 flat 的标题和背景颜色,也许您应该始终调用它(在 switch 语句之后)。

    如果这不起作用,我的建议是将问题分解为更小的部分。例如,创建 3 个 IBAction,每个按钮一个。为每个按钮指定插座名称,以便您准确了解每次更改的内容。尝试将重复的代码移到它自己的方法中。始终以小步骤进行测试,直到成功!

    为了让您入门,here's a sample project 具有一些基本的类似功能。

    【讨论】:

    • 实际上选择radiobutton1后显示的按钮颜色也没有变化。 @phi
    • 您能否分享一个项目,其中包含您正在尝试做的最小示例?或者至少有一些截图?
    • 我已添加屏幕截图,请查看。在屏幕截图中有一个单选按钮,下面有一些按钮,我希望它们在单击时更改背景和文本颜色。 @phi
    • 我只能通过显示一些示例代码来帮助你,检查我更新的答案
    • 是的,我从你提供的项目链接中得到了答案,谢谢伙计:)。 @phi
    【解决方案2】:

    我认为对于单选按钮,您只需为所有人​​设置图像即可。因此,您只需要将按钮设置为选定/正常状态。

    您可以像这样为所有不同的状态设置图像:

    [YOUR_BUTTON setImage:YOUR_IMAGE_NORMAL forState:UIControlStateSelected];
    [YOUR_BUTTON setImage:YOUR_IMAGE_SELECTED forState:UIControlStateNormal];
    [YOUR_BUTTON setImage:YOUR_IMAGE_HEIGHLIGHED forState:UIControlStateHighlighted];
    [YOUR_BUTTON setImage:YOUR_IMAGE_DISABLE forState:UIControlStateDisabled];
    

    关于文字颜色,我给你一个小技巧。检查我的以下方法:

    -(void)btnClick:(UIButton *)sender{
         // This is button on which user is clicked
        UIButton *btnCurrent = (UIButton *)sender;
    
        if(btnReference != nil)
        {
            // If this is not a nil, it means you have clicked another button previously.
            // So make it normal before doing any thing.
            btnReference.selected = false;
            [btnReference setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    
            // Assign reference of current button
            btnReference = btnCurrent;
        }
    
        // Make changes for clicked button
        btnReference.selected = TRUE;
        [btnReference setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
        [btnReference setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    
    }
    

    将此条件置于您的方法之上。所以你不必担心颜色等等。

    【讨论】:

      猜你喜欢
      • 2014-10-09
      • 2017-08-02
      • 2014-10-10
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 2014-10-07
      相关资源
      最近更新 更多