在macOS 10.11+上过滤或搜索NSCollectionView

时间:2017-08-15 15:35:07

标签: macos cocoa osx-elcapitan nscollectionview

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

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

1 个答案:

答案 0 :(得分:1)

可能有更好的方法,但在此之前,我发现不需要修改数据源(在概念上看起来稍微清晰一些,因为数据在过滤期间不会发生变化)的解决方法,只是呈现了哪些项目。

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

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

我仍然希望知道更好的方式,所以如果未来的读者有一个,我会改变接受的答案。