【问题标题】:How to compare self.button.currentImage to an image?如何将 self.button.currentImage 与图像进行比较?
【发布时间】:2014-07-21 18:11:54
【问题描述】:

我正在尝试创建一个由图像表示的按钮,只要按下该按钮,就会将图像更改为另一个图像,以便我可以知道当前选择了哪个图像。

- (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];}
}    

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

【问题讨论】:

  • 你试过[data1 isEqual:data2]吗?
  • 另外,顺便说一句,您可能不应该比较图像来获取此信息。保留一个 BOOL,如 if (self.personalSelected),在选择按钮时更改它。
  • @daltonclaybrook 我之前尝试过,但没有成功。看来它现在正在工作,大声笑?非常感谢您的回答!

标签: ios objective-c uibutton uiimage


【解决方案1】:

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

但要回答手头的问题,它不起作用,因为您正在比较指针,而不是数据。 data1 * 总是不同于 data2 *

来自文档: isEqualToData: 将接收数据对象与 otherData 进行比较。

- (BOOL)isEqualToData:(NSData *)otherData

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:
      if ([data1 isEqualToData: data2])
      

      而不是

      if (data1==data2)
      

      【讨论】:

        猜你喜欢
        • 2021-04-15
        • 2021-06-02
        • 1970-01-01
        • 1970-01-01
        • 2015-11-01
        • 2014-05-15
        • 1970-01-01
        • 1970-01-01
        • 2011-09-15
        相关资源
        最近更新 更多