如何改善您的IGListCollectionView

在我的上一篇文章中,我展示了如何将UITableView迁移到IGListCollectionView,今天,我将展示如何通过添加其他类型的单元格和处理触摸事件来改进它。 所以我们将最后一篇文章的项目用作我们的入门项目,您可以在这里找到

我们的目标是添加一个UISearchBar,一个带有水平滚动的UICollectionView,它将填充事件(我将其称为EmbeddedView),这是一种查看字符(行和网格)并在触摸事件上更改viewcontroller的替代方法。

为了简短而无聊,我将仅介绍一些关键主题,向您展示我们如何实现这一目标的:

首先,我们需要更改将模型加载到IGListCollectionView的方式。 我们的ViewController有一个应该符合IGListDiffableCharacter数组,但是现在我们将使用该协议而不是一个具体的类,因此我们需要创建一个新的IGListDiffable.数组IGListDiffable. 我们要包含在列表中的所有对象都应符合它,因此我们将创建一个Search ,一个CharactableView (将在我们的单元格是行还是网格时处理), Portrait和一个Embedded模型。

每个模型将代表我们的IGListCollectionView中的一个单元格。 您可以在下面看到我们如何在Search模型中做到这一点

之后,我们将在SectionControllers上工作。 除了EmbeddedSectionController之外,每个SectionController的工作方式都与我在上一篇文章中看到的一样,这一点值得特别注意,因为它将具有自己的IGListCollectionViewIGListAdapter因此我们可以从Marvel API中提取事件并将其显示给用户。

它应该实现IGListAdapterDataSourceIGListAdapterDelegate来拉动更多事件,例如在无尽的TableView中。

最后,我们只需要更改ViewController即可使用我们的新单元格。

我们创建了一个名为viewsIGListDiffable数组。

IGListAdapterDataSource objects(for:)方法中,我们基于filterString过滤字符,并添加Seach和EmbbedView以便将其放置在字符列表之前。

return [self.searchView as IGListDiffable] + [self.embeddedView] + (filter as [IGListDiffabe])

每次更改列表的布局时,我们都需要调用adapter.performUpdates()来更改列表,行到网格或网格到行的位置,它会基于diff算法重新加载IGListCollectionView。

要处理单元格上的触摸事件,我们需要实现didSelectItem()方法,就像在RowSectionControllerRowSectionController

您可以在此处检查最终项目。 如果您有任何意见,请通知我。