我正在尝试创建一个由图像表示的按钮,无论何时按下都会将图像更改为另一个图像,以便我可以知道当前选择的图像。
- (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];}
}
更改图像的行有效,但无法比较两张图像。任何帮助将非常感激!谢谢!
答案 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)