gpt4 book ai didi

ios - Swift - collectionView 单元格内的属性在 collectionView.performBatchUpdates > reloadItems(在 :) runs

转载 作者:行者123 更新时间:2023-11-28 05:43:29 25 4
gpt4 key购买 nike

我有一个 collectionView 单元格,它有一个 isExpanded: Bool 属性。当单元格第一次加载时,它被设置为 false 并且它只显示 1 行文本。如果文本有几行那么长,我会在第一行末尾附加“more ...”,如果按下标签,我会展开单元格。它有效,但我必须按标签两次以展开单元格,然后再按两次以将单元格折叠回 1 行。

我发现的是,当我第一次按下标签时,我检查是否 isExpanded == false 如果是,我将其设置为 true然后在协议(protocol)中传回单元格的 index.item 并调用 performBatchUpdates,然后调用 collectionView.reloadItems(at:)

运行后,我检查 isExpanded,它不是 true,而是 false,因此单元格不会展开。如果我现在再次按下标签,一切都会按预期进行,isExpanded 为真,单元格会展开。

为什么 isExpanded 属性在第一次循环时设置为 false,即使我将它设置为 true 但在第二次循环时它仍然设置为 true ?

为了更清楚一点

  1. isExpanded 最初是 false
  2. 标签被点击并且 isExpanded 被设置为 true
  3. performBatchUpdatesreloadItems(at:) 运行 isExpanded 后不知何故被设置回 false (这就是问题所在)
  4. 再次按下标签后,isExpanded 设置为 true
  5. performBatchUpdatesreloadItems(at:) 再次运行后 isExpandedtrue(this是第 3 步应该发生的事情)。

它应该是一个 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 }

// run logic to expand or collapse cell depending on wether isExpanded is true or false
}
}

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")
}
}
}

我尝试在协议(protocol)中传递 isExpanded(我删除了它)并在类中使用 CollectionView 我更新了单元格的 isExpanded 属性,但没有任何区别

func expandOrCollapseCell(indexItem: Int, isExpanded: Bool) {

if let cell = self.collectionView.cellForItem(at: indexPath) as? MyCell {

cell.isExpanded = isCellExpanded
}

// perform batchUpdates ...
}

最佳答案

这是一个常见的问题,依赖于出列的单元格来保持模型状态,例如

var isExpanded = false // should be inside model of each cell

你需要将这些数据添加到单元格的模型中,并在需要更改状态时检查它,然后重新加载

关于ios - Swift - collectionView 单元格内的属性在 collectionView.performBatchUpdates > reloadItems(在 :) runs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55736897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com