如何在单击相同的UI按钮时更改UIButton背景图像?

时间:2012-10-31 09:57:31

标签: ios objective-c iphone uibutton

我正在使用 UIButton 和xib backgroundImage check_box_off.png ,同时点击 atmbtn backgroundImage更改为 check_box_on.png 同时 NSLog 打印 yesString 并再次单击atmbtn backgroundImage中没有相同的变化 check_box_on.png < / strong>同时NSLog打印只相同 yesString ..一次又一次地使atmbutton叮当作响...

- (IBAction)atmAction:(id)sender{  
    if( [atmbtn backgroundImageForState:UIControlStateNormal] ==
        [UIImage imageNamed:@"check_box_on.png"] ) {
       [atmbtn setImage:[UIImage imageNamed:@"check_box_off.png"] 
               forState:UIControlStateNormal]; 

        noString = @"No"; 
        NSLog(@"atm=%@",noString);
    } else if( [atmbtn backgroundImageForState:UIControlStateNormal] ==
                [UIImage imageNamed:@"check_box_off.png"]) {

        [atmbtn setImage:[UIImage imageNamed:@"check_box_on.png"]
                forState:UIControlStateNormal];

         yesString = @"Yes";
         NSLog(@"atm = %@",yesString);
     }
}
  

输出:

     

NSLog打印:

     

大气压=是

     

大气压=是

     

大气压=是

我怎么解决这个问题?请分享您的想法。

5 个答案:

答案 0 :(得分:1)

使用它:

[atmbtn setBackgroundImage:[UIImage imageNamed:@"check_box_on.png"] forState:UIControlStateNormal];

答案 1 :(得分:0)

设置 BOOL变量而不是条件

.h文件

BOOL _isClicked;

.m文件

-(IBAction)atmAction:(id)sender{  

    if(!isClicked){

       [atmbtn setImage:[UIImage imageNamed:@"check_box_off.png"]
               forState:UIControlStateNormal];   
        _isClicked = YES;      

     } else {

         [atmbtn setImage:[UIImage imageNamed:@"check_box_on.png"]
                 forState:UIControlStateNormal];    
          _isClicked = NO;
     }
}

答案 2 :(得分:0)

您正在设置UIImage,而您正在查看backgroundImage

尝试

if([atmbtn imageForState:UIControlStateNormal] ==
   [UIImage imageNamed:@"check_box_on.png"])

而不是

if([atmbtn backgroundImageForState:UIControlStateNormal] ==
   [UIImage imageNamed:@"check_box_on.png"])

答案 3 :(得分:0)

您只需使用

即可
    [atmbtn setBackgroundImage:[UIImage imageNamed:@"check_box_off.png"]
                    forState:UIControlStateNormal];
    [atmbtn setBackgroundImage:[UIImage imageNamed:@"check_box_on.png"]
                    forState:UIControlStateSelected];

其中atmbtn是xib中按钮的出口。

答案 4 :(得分:0)

您可以尝试使用isEqual方法而不是==,因为您要比较对象而不是值。试试这个:

-(IBAction)atmAction:(id)sender{

    if([[atmbtn imageForState:UIControlStateNormal] 
          isEqual:[UIImage imageNamed:@"check_box_on.png"]] ) {

        [atmbtn setImage:[UIImage imageNamed:@"check_box_off.png"]
                forState:UIControlStateNormal];
        noString = @"No";
        NSLog(@"atm = %@",noString);

    } else if( [[atmbtn imageForState:UIControlStateNormal] 
                  isEqual:[UIImage imageNamed:@"check_box_off.png"]] ){

        [atmbtn setImage:[UIImage imageNamed:@"check_box_on.png"]
                forState:UIControlStateNormal];

        yesString = @"Yes";
        NSLog(@"atm = %@",yesString);
    }
}