比较NSCollectionView和UICollectionView#2

在本文中,我将讨论分别为macOS和iOS准备内容容器的区别。

对于那些来自iOS界的人来说,UICollectionView自iOS 6起就是一个很长的组件。它广泛用于显示具有不同布局的内容,例如网格,基于行或任何自定义布局。

数据源协议

DataSource协议用于提供集合视图所需的数据和视图。 在iOS中,有两种必需的方法来构建最小的UICollectionView。

collectionView(UICollectionView,numberOfItemsInSection:Int)

collectionView(UICollectionView,cellForItemAt:IndexPath)

第一个与macOS中的对应项相似,但第二个有所不同。

collectionView(NSCollectionView,numberOfItemsInSection:Int)

collectionView(NSCollectionView,itemForRepresentedObjectAt:IndexPath)

很明显,第一个API用于指示该部分中的单元格或项目的数量(仅默认一个会话)。 第二个API是实际收集数据信息并配置视图组件的API。

从方法签名中,您可能会注意到差异。 iOS非常直接地创建项目,但是macOS却创建了这种奇怪的东西,称为“ Represented Object”。 这是由于传统支持。 自MacOS 10.5起,NSCollectionView实际上就存在了,而iOS版本是从头开始构建的。 创建现代NSCollectionView API的过程中有很多知识。

装载笔尖

为了简化和可视化开发过程,我们通常使用Interface Builder创建容器内容,该内容将包含在Nib文件中(另存为* .xib文件)。

在iOS中,我们还设置了一个名为Reuse Identifier的“桥梁”。 集合视图具有管理多个单元的内存使用情况的机制。 数据源方法将使用Reuse Identifier查找存储在池中的单元格。 在简单的情况下,所有单元都具有相同的标识符。 每次都会拉出一个单元,并根据后备数据存储内容配置视图组件。 它可以为单元格显示设置不同的文本字段或图像。 该Reuse Identifier将被注册到选定的Nib文件中,并在其中加载默认视图组件。

但是,在macOS中,工作流程略有不同。 它使用makeItem(withIdentifier identifier: String, for indexPath: IndexPath)方法创建项目对象。 一种简单但不可思议的连接Nib文件的方法是,将标识符设置为与Nib文件相同的名称。 例如, MyItem的标识符将查找名为MyItem.xib的笔尖文件并检索其内容。 要进行快速演示,您可以在此处观看YouTube视频。