如何检查按钮是否有此图像

时间:2017-07-05 18:14:03

标签: ios swift image swift3 uibutton


我想检查myButton是否有一个命名图像。

我试试这个,但它不起作用

if (myButton.currentImage?.isEqual(UIImage(named: "ButtonAppuyer.png")) != nil){
        print("YES")
    } else {
        print("NO")
    }

这也不起作用

if myButton.currentImage?.isEqual(UIImage(named: "ButtonAppuyer.png")){
        print("YES")
    } else {
        print("NO")
    }

6 个答案:

答案 0 :(得分:7)

以下是我在Swift 3.0中提出的内容。

if let myButtonImage = myButton.image(for: .normal),
    let buttonAppuyerImage = UIImage(named: "ButtonAppuyer.png"),
    UIImagePNGRepresentation(myButtonImage) == UIImagePNGRepresentation(buttonAppuyerImage)
{
    print("YES")
} else {
    print("NO")
}

这可以清理很多。

extension UIButton {
    func hasImage(named imageName: String, for state: UIControlState) -> Bool {
        guard let buttonImage = image(for: state), let namedImage = UIImage(named: imageName) else {
            return false
        }

        return UIImagePNGRepresentation(buttonImage) == UIImagePNGRepresentation(namedImage)
    }
}

然后使用它

if myButton.hasImage(named: "ButtonAppuyer.png", for: .normal) {
    print("YES")
} else {
    print("NO")
}

答案 1 :(得分:1)

您可以将按钮的图像和指定的图像转换为NSData并比较两个数据对象:

let imgData1 = UIImagePNGRepresentation(buttonImage)
let imgData2 = UIImagePNGRepresentation(namedImage)
let equal = imgData1 == imgData2

请注意,这仅在两个图像完全相同时才起作用(例如,来自相同的源文件);如果一个是另一个的缩小版本,它就不会工作。

此外,应该提到的是,这可能是一项非常昂贵的操作,不应经常运行。

答案 2 :(得分:0)

无法从UI元素中检索图像名称。您需要在另一个位置存储要检索的值。

例如,您可以创建UIButton的自定义子类,其中包含用于存储图像名称或其他标识数据的附加属性。

答案 3 :(得分:0)

 if let ButtonImage = myButton.image(for: .normal),
    let Image = UIImage(named: "ButtonAppuyer.png"),
    UIImagePNGRepresentation(ButtonImage) == UIImagePNGRepresentation(Image)
{
    print("YES")
} else {
    print("NO")
}

答案 4 :(得分:0)

在Swift 4.2和Xcode 10.1

buttonOne.image(for: .normal)!.pngData() == UIImage(named: "selected")!.pngData()

答案 5 :(得分:0)

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