如何将self.button.currentImage与图像进行比较?

时间:2014-07-21 18:11:55

标签: ios objective-c uibutton uiimage

我正在尝试创建一个由图像表示的按钮,无论何时按下都会将图像更改为另一个图像,以便我可以知道当前选择的图像。

- (IBAction)imageWasPressed:(id)sender {
   UIImage *imageWork = [UIImage imageNamed:@"icn_work"];
NSData *data1 = UIImagePNGRepresentation(self.imageButton.currentImage);
NSData *data2 = UIImagePNGRepresentation(imageWork);

if (data1==data2){
    [self.imageButton setImage:[UIImage imageNamed:@"icn_personal"] forState:UIControlStateNormal];}
}

我也尝试了这个,但它不起作用:

- (IBAction)imageWasPressed:(id)sender {
if ([[self.imageButton imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"icn_work"]]){
    [self.imageButton setImage:[UIImage imageNamed:@"icn_personal"] forState:UIControlStateNormal];}
}    

更改图像的行有效,但无法比较两张图像。任何帮助将非常感激!谢谢!

3 个答案:

答案 0 :(得分:2)

这是非常规的方法,我建议您以其他方式跟踪您的选择。

但要回答手头的问题,它不起作用,因为你是在比较指针,而不是数据。 data1 *始终与data2 *不同。

从文档中: 的 isEqualToData: 将接收数据对象与其他数据进行比较。

- (BOOL)isEqualToData:(NSData *)otherData

答案 1 :(得分:2)

如果您想更改关于它的状态的按钮图像,您可以为不同的状态分配不同的图像。

[self.imageButton setImage:image1 forState:UIControlStateNormal];
[self.imageButton setImage:image2 forState:UIControlStateHighlighted];
[self.imageButton setImage:image3 forState:UIControlStateSelected];

由于你可以获得按钮状态,并且你知道你为状态设置的图像,你也可以获得图像。

答案 2 :(得分:0)

if ([data1 isEqualToData: data2])

而不是

if (data1==data2)