检查按钮图像不起作用

时间:2016-03-18 13:18:07

标签: objective-c image uibutton

我有几个按钮。按钮图像是一个圆圈或X.我想检查实际的按钮图像。我用以下代码尝试了它,但我总是得到“_cell00!= X”

按钮图像由

设置
[_cell00 setImage: [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]] forState:UIControlStateNormal];

并且是我的支票代码:

if ([_cell00 imageForState:UIControlStateNormal] == [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]]) {
                        NSLog(@"CELL00 = X");
}

或:

if ([_cell00 imageForState:UIControlStateNormal] != [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]]) {                            NSLog(@"CELL00 != X");
}

我的情况是什么问题?

2 个答案:

答案 0 :(得分:1)

只需使用backgroundImageForState UIButton方法即可返回UIImage

- (UIImage *)backgroundImageForState:(UIControlState)state

如下面的代码:

if ([[_cell00 backgroundImageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]]]){
  // NSLog(@"CELL00 = X");
} else{
  // Something
}

OR

if ([[_cell00 backgroundImageForState:UIControlStateNormal] == [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]]]) {

    //
}
else{


}

答案 1 :(得分:1)

好的,UIImage方法[UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]]总是创建一个新的图像对象实例,来到你的代码

 UIImage *image_X = [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]]; //<UIImage: 0x7a041ae0> an example lets say
[_cell00 setImage:image_X forState:UIControlStateNormal];

在上面的方法中你正在为按钮设置新的图像实例正常状态让我们说它是<UIImage: 0x7a041ae0>

在你的比较方法中,

 UIImage *image_X  = [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]]; //<UIImage: 0x78e02e90> it create a brand new image 
if ([_cell00 imageForState:UIControlStateNormal] == image_X) 
{
     NSLog(@"CELL00 = X");
}

在上面的代码中,你再次创建了一个新实例,它与你为按钮_cell00设置的实例不同,图像是<UIImage: 0x78e02e90>它完全不同,就是它总是如此转到&#34; _cell00!= X&#34;

所以你可以这样做,

设置按钮的图像时设置按钮的所有图像,

[_cell00 setImage: [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]] forState:UIControlStateNormal];
[_cell00 setImage: [UIImage imageNamed:[NSString stringWithFormat:@"Dot_X.png"]] forState:UIControlStateHighlighted];
[_cell00 setImage: [UIImage imageNamed:[NSString stringWithFormat:@"Dot_O.png"]] forState:UIControlStateSelected];

并且在比较按钮时,只需检查天气是否选中了该按钮,如果未选择该按钮,则选择它,如果不是仅仅切换回来,例如,您的比较方法如下所示

if(_cell00.selected)
{
   _cell00.selected = NO;
   NSLog(@"CELL00 = X");
}
else
{
    _cell00.selected = YES;
    NSLog(@"CELL00 != X");
}