【发布时间】:2018-07-27 13:49:47
【问题描述】:
我有一个通过 Core Data 的NSFetchedResultsControler 连接的表视图。这些单元格有一个带有属性文本的UILabel 和一个代表对象的isEnabled 值的UISwitch。在单元格内,我有一个功能:
func configure(with viewModel: CellViewModel) {
myCustomLabel.attributedText = viewModel.attributedText // NSMutableAttributedText
}
切换开关会更改对象上的isEnabled 值,从而引发NSFetchedResultsControler,它调用:
let cell: MyTableViewCell = tableView.dequeueReusableCell(forIndexPath: indexPath) //my custom helper method
let cellViewModel = viewModel.itemModel(at: indexPath)
cell.configure(with: cellViewModel)
我不想使用reloadData、reloadRows 或reloadSections,因为我想在更改单元格状态的同时保留动画,并在仅翻转开关时避免单元格褪色动画。我知道这是一种非常糟糕的方法,但它需要保留动画。
问题是:标签上的attributedText 不会立即更改。只有在重用单元格后。调试器正确显示标签的新值。我试过了:
-
this suggestion(预先设置字体和颜色为
nil), - 在标签和超级视图上调用
setNeedDisplay - 先设置无归属文本,再设置
attributedText
没有任何作用。你知道为什么会这样吗?
系统为 iOS 11.4,XCode 9.4.1。
【问题讨论】:
标签: swift uitableview core-data