ios - iOS Swift 更新到 UI 延迟
问题描述
我有一个 UIView 的子类。在本课程中,我想在更改特定布尔标志时更改背景。(我通过 控制这个标志touchesBegan
)
下面是我的代码。
class TileView: UIView {
let selectedBackgroundColor: UIColor = .cyan
let nonSelectedBackgroundColor: UIColor = .white
private var isSelected = false {
didSet {
backgroundColor = isSelected ? self.selectedBackgroundColor : self.nonSelectedBackgroundColor
print("isSelected: " + String(isSelected))
}
}
override init(frame: CGRect) {
super.init(frame: frame)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
isSelected = !isSelected
}
}
当touchesBegan
被触发时,我进入isSelected: true
控制台,但背景颜色没有改变。
我注意到,在视图中点击后,如果我点击视图之外屏幕上的其他位置,它会改变颜色。
我对可能导致这种情况的原因感到困惑。
编辑:
这是行为的简短记录,因为我的描述不够清楚。记录中的每个白色方块都是一个 TileView。 https://gyazo.com/e8152d18b4efe1c5b1c6c04b55b661fe
解决方案
所以我发现我的代码很好,问题是模拟器没有正确更新。有关详细信息,请参阅此处的答案。
推荐阅读
- python - 熊猫:删除该组的特定值后跟另一个值的组行
- postgresql - 如何确保函数仅从一个特定模式中选择?
- r - R:定义列,其中第一条记录是来自其他列的计算,并且使用同一列中的先前记录更新后续记录
- excel - 使用企业网关的 PowerBI 自动刷新
- javascript - 图表 JS 堆叠条形之间的距离
- node.js - Heroku 部署以错误 npm ERR 结束!404 未找到:事件流@3.3.6
- c# - 部分视图是限制用户访问的好方法吗?
- programming-languages - 为什么所有编译器 Pascal 都不起作用?
- ios - Strava 等应用程序如何在 iPhone 上继续在后台运行?
- android - AppCompatButton 子类具有透明背景