有没有办法比较Swift / iOS中的按钮图像

时间:2015-03-09 03:08:39

标签: ios swift

我环顾四周,我认为没有办法做到这一点,但我正在寻找的是比较按钮图像的能力。我有一种情况,我希望在更改之前将按钮设置为某个图像。伪代码就像

if (myCell.followButton.image == UIImage(named: "")) {
//do something here
}

5 个答案:

答案 0 :(得分:27)

由于kakubei

,已针对iOS 8进行了更新

UIButton有一个名为currentImage的属性,因此请使用它来比较图像:

iOS 8 +

if myCell.followButton.currentImage.isEqual(UIImage(named: "yourImageName")) {
    //do something here
}

iOS 7 -

if (myCell.followButton.currentImage == UIImage(named: "yourImageName")) {
    //do something here
}

实现此功能的更好方法是跟踪按钮的选定状态并根据该状态更改其图像。如果您更改图像的名称,这将使其更加灵活。

答案 1 :(得分:8)

Matt Cooper的解决方案在iOS 8中无法运行,因为Apple已经改变了缓存图像的方式。您现在需要使用.isEqual

如:

// assuming both button and newButton are UIImage instances
if button.currentImage!.isEqual(newButton) {
  ...

来自Apple Docs:

  

从iOS 8开始,您无法再依赖指针相等来进行比较   缓存UIImage对象,因为缓存机制可能不会返回   相同的UIImage对象,但会分别缓存图像数据。您   必须使用isEqual:正确测试是否相等。

这样做的缺点是它不能在iOS 7中运行!我不知道哪种方式可以兼顾,但我希望有,我自己也在寻找它:)

答案 2 :(得分:0)

可以通过以下方式完成:

   if let btnImage = sender.image(for: .normal),
        let Image = UIImage(named: "firstImage.png"), UIImagePNGRepresentation(btnImage) == UIImagePNGRepresentation(Image)
    {
        sender.setImage(UIImage(named:"secondImage.png"), for: .normal)

    }
   else 
    {
         sender.setImage( UIImage(named:"firstImage.png"), for: .normal)
    }

答案 3 :(得分:0)

在iOS 13上,@ Matt Cooper的答案不起作用,我不确定但图像名称中包含其他信息(可能自2015年以来API发生了变化),因此我的比较总是返回false:

UIImage: 0x28297e880 named (main: Icon-camera-alt) {20, 20}

我已经在我的情况下使用了它:

myButton.currentImage?.description.contains("camera-alt")

答案 4 :(得分:-1)

当然,如果您保留图像参考,您可以直接进行比较。否则,我不知道有办法。