在 macOS 10.11+ 上过滤或搜索 NSCollectionView

Filter or search NSCollectionView on macOS 10.11+

我正在寻找一种方法来过滤 NSCollectionView 中显示的项目。我的 NSCollectionView 使用 10.11 及更高版本的机制进行管理(即使用 NSCollectionViewDataSourceNSCollectionViewDelegate)。我似乎找不到有关如何完成此操作的任何文档。

是否可以为可见项实施过滤器,如果可以,是否有可用的文档向我展示它是如何完成的?

可能有更好的方法,但在此之前,这是我发现不需要修改数据源的解决方法(从概念上讲,这似乎稍微更清晰一些,因为数据在过滤期间不应更改,只是渲染了哪些项目)。

指定 NSCollectionViewDelegateFlowLayout 作为您的 NSCollectionView 代表。然后实现方法collectionView(NSCollectionView, layout: NSCollectionViewLayout, sizeForItemAt: IndexPath)(docs)。这允许您在集合视图的布局期间指定每个项目的大小。我只是 return 为与当前过滤器字符串不匹配的项目编辑了 0 宽度和高度 CGSize。否则 return 给定布局的 ItemSize。在搜索字段的每个操作(例如每次击键)中,我在集合视图上调用 ReloadData(),这会导致重新布局。

一个问题是您必须将最小项目间距和行间距设置为 0,否则 0 大小的项目仍将获得项目间空间,这会产生间距不均匀的可见项目。

我仍然很想知道更好的方法,所以如果未来的读者有更好的方法,我会更改已接受的答案。