我有一个collectionview单元
isExpanded: Bool
财产。当单元格首次加载时,它被设置为
false
它只显示一行文本。如果文本有几行长,我会在第一行的末尾加上“更多…”,如果按下标签,我会展开单元格。它可以工作,但我必须按两次标签来展开单元格,然后再按两次将单元格折叠回一行。
我来查的是当我第一次按下标签的时候
isExpanded == false
如果是的话,我把它设置为
true
然后在协议中传递单元格的index.item并调用
performBatchUpdates
然后
collectionView.reloadItems(at:)
是的。
运行后我检查
isExpanded
而不是
真的
是的
假
所以细胞不会膨胀。如果我再按一次标签,一切都会按原计划进行
isExpanded is true
细胞会膨胀。
为什么
已展开
属性设置为
假
在第一次旋转时,即使我将其设置为真,但在第二次旋转时,它仍保持为真?
为了更清楚一点
-
已展开
最初
假
-
标签被点击
已展开
设置为
真的
-
之后
执行更新
和
reloadItems(at:)
跑
已展开
不知怎的又回到了
假
(
这就是问题所在
)
-
再次按下标签后
已展开
设置为
真的
-
之后
执行更新
和
重新加载项(位于:)
再次运行
已展开
是
真的
(
这是第三步应该做的
)中。
这应该是一个3步的过程,但它总是一个5步的过程。
折叠单元格时也会发生同样的事情,我必须按两次标签才能折叠。
单元类
protocol: MyCellDelegate: class {
func expandOrCollapseCell(indexItem: Int)
}
weak var delegate: MyCellDelegate?
var indexItem: Int = 0
var isExpanded = false
var review: Review? {
didSet {
if let review = review else { return }
}
}
func tapGestureForLabel() {
if !isExpanded {
isExpanded = true
} else {
isExpanded = false
}
delegate?.expandOrCollapseCell(indexItem: self.indexItem)
}
在类中使用collectionview
func expandOrCollapseCell(indexItem: Int) {
let indexPath = IndexPath(item: indexItem, section: 0)
UIView.animate(withDuration: 0) {
self.collectionView.performBatchUpdates({ [weak self] in
self?.collectionView.reloadItems(at: [indexPath])
self?.collectionView.layoutIfNeeded()
}) { (_) in
print("finished updating cell")
}
}
}
我试过传球
已展开
在协议中(我删除了它),在带有collectionview的类中,我更新了单元格的
已展开
像这样的财产但没什么区别
func expandOrCollapseCell(indexItem: Int, isExpanded: Bool) {
if let cell = self.collectionView.cellForItem(at: indexPath) as? MyCell {
cell.isExpanded = isCellExpanded
}
}