如何创建打开/关闭 collectionView 部分

Posted

技术标签:

【中文标题】如何创建打开/关闭 collectionView 部分【英文标题】:How to create an open/close collectionView section 【发布时间】:2016-07-27 14:52:24 【问题描述】:

我有一个UICollectionView,标题下有多个单元格,没什么特别的。

这是,我想让 collectionView 可以打开和关闭。加载视图时,该部分将关闭,当您点击标题时,所有单元格都将显示(带有常规的打开动画)。

有人知道我该怎么做吗?

谢谢!

【问题讨论】:

【参考方案1】:

有几种不同的方法可以做到这一点,但一种简单的方法是跟踪展开的部分

var expandedSections = NSSet()

然后在您的部分标题上设置一个手势识别器,以便在您点击它时告诉您。当用户点击某个部分时,您需要两种方法:

func sectionHeaderWasTapped(section: Int) 
    if self.expandedSections.contains(section) 
        self.expandedSections.removeObject(Int)
    
    else 
        self.expandedSections.addObject(Int)
    
    self.collectionView.reloadSections(NSIndexSet(index: section))

然后在 numberOfItemsInSection 中做:

func numberOfItemsInSection(section: Int) 
    if self.expandedSections.contains(section) 
        return numberOfItemsInSection
    
    else 
        return 0
    

您可以创建辅助方法来稍微清理一下。例如:

func toggleSectionExpanded(section: Int) 
    if self.expandedSections.contains(section) 
        self.expandedSections.removeObject(Int)
    
    else 
        self.expandedSections.addObject(Int)
    
    self.collectionView.reloadSections(NSIndexSet(index: section))

func sectionIsExpanded(section:Int) 
    return self.expandedSections.contains(section)

如果你想清理一下

【讨论】:

【参考方案2】:

您可以通过插入和删除单元格来做到这一点。

用于此 insertItemsAtIndexPathsdeleteItemsAtIndexPaths 方法在 performBatchUpdates 块中,如下所示:

[self.collectionView performBatchUpdates:^ 
    [datasource insertObject:OBJECT atIndex:INDEX];
    [self.collectionView insertItemsAtIndexPaths:@[INDEX_PATH]];
 completion:nil];

[self.collectionView performBatchUpdates:^ 
    [datasource removeItemAtIndex:INDEX_PATH];
    [self.collectionView deleteItemsAtIndexPaths:@[INDEX_PATH]];
 completion:nil];

【讨论】:

以上是关于如何创建打开/关闭 collectionView 部分的主要内容,如果未能解决你的问题,请参考以下文章

为collectionView正确关闭键盘

如何将collectionview单元格扩展到全屏[关闭]

如何在 CollectionView 中添加业务逻辑? [关闭]

如何在 CollectionView 中添加 SearchBar? [关闭]

重新加载collectionview后关闭视图

检索 UserDefaults 后在 viewdidload 上刷新 collectionView