我试图了解正在发生的事情,我对此感到非常困惑。基本上,我有一个UITableViewCell
,在那个单元格内我有一个UIBUtton
。当表格加载并调用cellForRowAt
时,我会设置UIButton
图片并向其添加目标。
在应用进入后台之前,我点按调用我的功能的UIButton
。在该函数中,我检查UIButton
的图像是否等于我设置的图像。
然而,一旦应用程序进入后台然后重新进入前景,当我点击UIButton
并检查按钮的图像是否与设置的图像相同(并且也可见)对我来说,不是吗?
我不明白为什么当应用程序在后台进入前台后,UIButton
图像不会被保留。
以下是一些示例代码:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! UITableViewCell
let button = cell.viewWithTag(1) as! UIButton
button(self, action: #selector(ViewController.checkImage), for: UIControlEvents.touchUpInside)
button(#imageLiteral(resourceName: "button_stained"), for: UIControlState.normal)
}
fun checkImage(_ sender: UIButton)
{
if sender.currentImage == #imageLiteral(resourceName: "button_stained")
{
print("TEST")
}
}
TEST
仅在我的视图控制器加载时打印出来。如果我的应用程序进入后台,然后返回到前台,TEST
将无法打印出来。
我也尝试使用sender.currentImage
以及sender.image(for: .normal)
无效。
有人可以向我解释为什么会这样吗?
以下是一个示例项目:
感谢。
答案 0 :(得分:0)
问题是你的“==”比较。你必须使用isEqual。
请查看Apple API Reference部分“比较图像”。
答案 1 :(得分:0)
感谢@Rikh指出我正确的方向
我能够使用提供的答案解决问题:
How to compare two UIImage objects
针对 Swift 3.0 进行了更新:
extension UIImage
{
func isEqualToImage(image: UIImage) -> Bool
{
let data1: Data = UIImagePNGRepresentation(self)!
let data2: Data = UIImagePNGRepresentation(image)!
return data1 == data2
}
}