ios - 当 ViewController(包含它)在后台时,“button.setImage”不起作用
问题描述
我正在为基于 CoreBluetooth 的应用程序使用委托模式。我有一个主 ViewController,它是我的 BLEHandler 类的委托。我正在根据从以下委托方法获得的响应更新一个按钮:
func acIsOn(error: NSError?) {
if error == nil{
pushButton.setImage(UIImage(named: "state4"), for: .normal)
}
}
当我的委托控制器类在前台时它工作正常,但是当我移动到另一个 ViewController 并调用处理程序类的方法作为响应调用上面的委托方法时,图像上的按钮不会更新。
这是我已经尝试过的:
将语句包装在
DispatchQueue.main.async{}
调用
pushButton.setNeedsLayout()
和setNeedsDisplay()
但都没有奏效。,
我还确保当 ViewController 不在前台时调用此方法。
编辑1:我更感兴趣的是了解不允许这种情况发生的限制,我不是在寻找绕过这个的黑客/技巧。
编辑 2:正如 Shoazab 所述,button.setBackgroundImage() 在 VC 处于后台时工作。仍然很好奇为什么 button.setImage 在后台不起作用,但在 VC 位于顶部时却起作用。
解决方案
调用 btn.setBackgroundImage() 它将设置它
推荐阅读
- javascript - React moible 导航菜单在浏览器中运行良好,在移动设备上滞后
- django - Django 多语言站点
- r - 如何在 R 中将 lapply 与 get.confusion_matrix() 一起使用?
- python - 无法通过语音适应增强来提高转录准确性
- c++ - 在 C++ 中定义接口(没有成员的抽象类)
- clickhouse - 在clickhouse中对多列(一个是数组)进行聚合查询
- docker - WSL2 和 Docker Desktop for windows 的网络问题
- image - Pov-ray 中的 image_map 未按预期工作
- javascript - javascript通过lodash获取具有相同键的数组对象的平均值
- css - 如何将 MDC Web 的 Filled TextField 的高度设置为更小,但仍允许浮动标签正确浮动?