Tag: Nscollectionview

与NSCollectionViewItem纠缠

如果我此时尝试运行该项目,将显示错误。 我最终进行了搜索,很多人以前都遇到过这个问题。 自2014年以来,它发生在大型API更新之前。 到目前为止,没有解决方案,只能删除它。 覆盖内容大小并不容易 我来自iOS开发背景,并且一直在使用UICollectionView。 一个常见的技巧是更改contentSize,以便获得更大的可滚动区域。 将偏移量设置为特定区域以进行显示很有用。 与UICollectionView不同,NSCollectionView中没有’contentSize’属性。 相反,可以使用NSCollectionViewLayout中的属性“ collectionViewContentSize”来更改contentSize。 这也存在于iOS的对应版本中。 这也意味着,该使用2015年更新中可用的新API了。 然后,假设我更喜欢流布局,我将创建NSCollectionViewFlowLayout的子类。 我现在可以覆盖该属性以允许更大的内容大小。 在替换布局时,我还将在代码中设置项目大小。 harryworld / NSCollectionViewItem 通过在GitHub上创建一个帐户为NSCollectionViewItem开发做出贡献。 github.com 创建项目的占位符可能会导致问题 每个项目都有一个大小。 有时,我不想使用数据源制作商品,而是想将其创建为占位符。 这是根据项目的内容执行一些尺寸计算的。 如果仅创建项目,则不会链接其中的UI组件。 通常,我们从对象连接那些组件。 当NSCollectionView制作项目时,它将正确链接它们。 但是,如果我使用构造函数初始化该项目,则这些组件不会连接。 有时,我什至会收到“视图未加载”的错误。 解决方案分为两部分。 第1部分:为了确保NSView在创建时可用,您应该将视图同时连接到文件的所有者和对象。 在这种情况下,我们将依靠文件的所有者连接来初始化视图。 第2部分:对于其他UI组件,它们充当Interface Builder中的子视图。 我们需要手动连接它们。 只需循环浏览所有子视图,并将它们与预定义的标识符进行匹配。 harryworld / NSCollectionViewItem 通过在GitHub上创建一个帐户为NSCollectionViewItem开发做出贡献。 github.com 我已经创建了解决所有这些问题的示例项目,您可以在此处找到源代码。

比较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视频。

比较NSCollectionView和UICollectionView#1

在将应用程序从iOS移植到macOS时,可以比较相似之处并移植代码。 自2015年使用OSX El Capitan 10.11(现称为macOS)以来,NSCollectionView已改进为现代API,看起来很像iOS的同级产品。 但是,仍有一些细微的更改,您需要进行研究才能注意到。 我将在以后的帖子中写这些。 这次,我将从内容容器的核心元素开始。 在macOS中,它称为NSCollectionViewItem。 在iOS中,您将找到它作为UICollectionViewCell。 内容容器的性质 为了指出这两个容器的基本原理,应从其祖先开始。 继承树如下所示: NSCollectionViewItem> NSViewController UICollectionViewCell> UICollectionReusableView> UIView 在macOS环境中,容器是一个控制器,它像其他View Controller一样具有一堆生命周期方法。 但是,在iOS中,它是一种视图,可以包含元素的子视图。 查看层次结构 为了继续上一点,默认情况下NSCollectionViewItem没有视图。 必须以编程方式或使用Interface Builder创建视图。 您可以在YouTube视频中了解有关如何构建此基础的更多信息。 在iOS中,它要简单得多。 假设您正在使用Interface Builder构建内容,只需将组件拖动到创建UICollectionViewCell附带的视图中即可 。 此外, UICollectionViewCell还具有一些访问视图的默认属性。 contentView-创建随附的默认视图 backgroundView —(可选)显示在单元格其他内容后面的视图 selectedBackgroundView —(可选)选择单元格时在背景视图上方显示的视图 在下一篇文章中,我将讨论准备此内容容器的区别。 参考文献 NSCollectionViewItem 项目是集合视图显示的最常见的元素类型,每个集合视图都必须位于… developer.apple.com UICollectionViewCell – UIKit | Apple开发人员文档 当一个数据项位于集合视图中时,UICollectionViewCell对象将显示该数据项的内容。developer.apple.com