gpt4 book ai didi

ios - 在 UICollectionView swift 中折叠一个部分的单元格

转载 作者:搜寻专家 更新时间:2023-10-31 23:09:57 27 4
gpt4 key购买 nike

我有一个包含多个部分的 UICollectionView。每个部分都有一个 HeaderView(类型为 UICollectionReusableView)和多个单元格(类型为 UICollectionViewCell)。

每个标题都有一个隐藏/显示按钮,用于隐藏/显示单元格。在任何时候,标题都不会消失,即使它下面的所有单元格都折叠/隐藏也是如此。

+------------------------+
| A Header [HIDE] |
| [Cell A] [Cell B] |
| [Cell c] [Cell D] |
| -----------------------|
| B Header [HIDE] |
| [Cell A] [Cell B] |
| [Cell c] [Cell D] |
| |
+------------------------+

如果单击“A Header”的隐藏按钮,设计将如下所示:

+------------------------+
| A Header [SHOW] |
| -----------------------|
| B Header [HIDE] |
| [Cell A] [Cell B] |
| [Cell c] [Cell D] |
+------------------------+

我读到过 Accordion 菜单,但它似乎与 TableView 一起使用。 Making Simple Accordion TableView in swift?

我还尝试重新加载 0 个单元格以复制隐藏行为

public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
isFirstHidden = true
collectionView.performBatchUpdates({
let indexSet = IndexSet(integer: 0)
collectionView.collectionViewLayout.invalidateLayout()
collectionView.reloadSections(indexSet)
}, completion: nil)
}

public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if (section == 1 && isFirstHidden) {
return 0;
}
return 4;
}

但我仍然收到 NSInternalInconsistencyException - 无效更新:第 1 部分中的项目数量无效。

能否请您给我任何指示或分享文档链接,这将帮助我了解单元格折叠行为的工作原理。

编辑:我想要实现的目标的另一个例子。

+------------------------+
| A Header [HIDE] |
| [Cell A] [Cell B] |
| [Cell c] [Cell D] |
| -----------------------|
| B Header [HIDE] |
| [Cell A] [Cell B] |
| [Cell c] [Cell D] |
| -----------------------|
| C Header [HIDE] |
| [Cell A] [Cell B] |
| [Cell c] [Cell D] |
| |
+------------------------+

如果单击标题 B 的隐藏按钮 -

+------------------------+
| A Header [HIDE] |
| [Cell A] [Cell B] |
| [Cell c] [Cell D] |
| -----------------------|
| B Header [SHOW] |
| -----------------------|
| C Header [HIDE] |
| [Cell A] [Cell B] |
| [Cell c] [Cell D] |
| |
+------------------------+

最佳答案

您必须添加数据源方法。在该方法中,您可以设计页眉或页脚 View 。

override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {

case UICollectionElementKindSectionHeader:

let headerView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "Header", forIndexPath: indexPath) as! UICollectionReusableView
let headerBtn = UIButton()
headerBtn.addTarget(self, action:#selector(headerBtnTapped), for: .touchUpInside)
self.view.addSubview(headerBtn)

return headerView

case UICollectionElementKindSectionFooter:
let footerView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: "Footer", forIndexPath: indexPath) as! UICollectionReusableView

return footerView

default:

assert(false, "Unexpected element kind")
}
}

在标题 View 中,headerBtnTapped 方法将在 headerView 上按下 headerBtn 后调用。因此您可以在 中切换数组或内容(您在 numberOfItemsInSection 上返回) headerBtnTapped 方法并重新加载它。

关于ios - 在 UICollectionView swift 中折叠一个部分的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43675240/

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