首页 > 解决方案 > 当 ViewController(包含它)在后台时,“button.setImage”不起作用

问题描述

我正在为基于 CoreBluetooth 的应用程序使用委托模式。我有一个主 ViewController,它是我的 BLEHandler 类的委托。我正在根据从以下委托方法获得的响应更新一个按钮:

    func acIsOn(error: NSError?) {
      if error == nil{
          pushButton.setImage(UIImage(named: "state4"), for: .normal)
      }
    }

当我的委托控制器类在前台时它工作正常,但是当我移动到另一个 ViewController 并调用处理程序类的方法作为响应调用上面的委托方法时,图像上的按钮不会更新。

这是我已经尝试过的:

  1. 将语句包装在DispatchQueue.main.async{}

  2. 调用pushButton.setNeedsLayout()setNeedsDisplay()

但都没有奏效。,

我还确保当 ViewController 不在前台时调用此方法。

编辑1:我更感兴趣的是了解不允许这种情况发生的限制,我不是在寻找绕过这个的黑客/技巧。

编辑 2:正如 Shoazab 所述,button.setBackgroundImage() 在 VC 处于后台时工作。仍然很好奇为什么 button.setImage 在后台不起作用,但在 VC 位于顶部时却起作用。

标签: iosswift

解决方案


调用 btn.setBackgroundImage() 它将设置它


推荐阅读