我想检查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")
}
答案 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
}