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

问题描述:

我知道这个问题经常被问到,我已经应用了许多代码,但仍然没有得到解决方案。在IOS中单击时更改按钮文本和背景颜色

我有三个单选按钮,当我选择radiobutton1它显示了show按钮,现在我想的是,当用户点击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

一个可能的问题可能是你叫[self BgColor];只内case 1:块。由于该方法似乎处理房屋和公寓的标题和背景颜色,因此您应该始终将其称为(在switch声明之后)。

如果这不起作用,我的建议是以较小的部分来解决问题。例如,创建3个IBActions,每个按钮一个。给每个按钮分配出口名称,以便您确切知道每次更改的内容。尝试将重复的代码移动到自己的方法中。一直测试,并以小步骤进行测试,直至完成!

为了让你开始,here's a sample project有一些基本类似的功能。

+0

实际上,在选择radiobutton1后显示的按钮也没有颜色变化。 @phi –

+0

你能分享一个项目吗?或者至少有一些截图? – phi

+0

我已添加屏幕截图查看。在屏幕截图中有一个单选按钮,下面有一些按钮,我希望它们在点击时更改背景和文字颜色。 @phi –

我认为对于单选按钮,你只需要为所有的设置图像。所以你只需要按钮选择/正常状态。

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

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

} 

把这个条件放在你的方法之上。所以你不必担心颜色和所有。