在IOS中单击时更改按钮文本和背景颜色

时间:2017-07-17 13:57:02

标签: ios objective-c button

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

我有三个单选按钮,当我选择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];
    }
}

enter image description here

2 个答案:

答案 0 :(得分:1)

一个可能的问题可能是您只在[self BgColor];块内调用case 1:。由于该方法似乎处理了房屋和公寓的标题和背景颜色,也许你应该总是称之为(switch语句之后)。

如果这不起作用,我的建议是以较小的碎片来解决问题。例如,创建3个IBActions,每个按钮一个。为每个按钮指定插座名称,以便您确切地知道每次更改的内容。尝试将重复代码移动到自己的方法。一直进行测试,然后逐步进行测试,直至完成!

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

答案 1 :(得分:0)

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

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

[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];

}

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