当应用程序从后台进入前景时,UITableViewCell中的UIButton不会保留图像?

时间:2017-04-14 06:43:31

标签: ios swift swift3 uibutton

我试图了解正在发生的事情,我对此感到非常困惑。基本上,我有一个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)无效。

有人可以向我解释为什么会这样吗?

以下是一个示例项目:

Test

感谢。

2 个答案:

答案 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
    }
}