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

标签 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

最佳答案

一个可能的问题可能是您仅在 case 1: block 内调用 [self BgColor];。由于该方法似乎负责处理房屋和公寓的标题和背景颜色,因此也许您应该始终调用它(在 switch 语句之后)。

如果这不起作用,我的建议是将问题分解为更小的部分。例如,创建 3 个 IBAction,每个按钮一个。为每个按钮指定 socket 名称,以便您准确地知道每次要更改的内容。尝试将重复代码移至其自己的方法中。不断地小步测试,直到成功!

为了帮助您开始,here's a sample project具有一些基本的类似功能。

关于ios - 在 IOS 中单击时更改按钮文本和背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45146241/

相关文章:

ios - 无法使用 'ios:' .concat(data) 在 iOS 的 Web View 中从服务器调用数据

ios - iOS 中的设备兼容性问题

iphone - 为什么 numberOfSectionsInTableView 在 UITableViewController 中被调用了两次?

objective-c - 如何覆盖 Objective-C 中的可变参数方法

ios - 如何防止 iOS 在从后台返回后调整 UIViewController View 的大小

ios - NSDateFormatter 减少日期的日期

ios - 重新加载除一个单元格之外的表格 View

css - 在 Drupal 中,社交按钮彼此重叠而不是彼此相邻

jquery-ui - 按钮无法通过 jQuery UI Draggable() 进行拖动

javascript - 使用具有特定 id 的 jquery 提交表单