在 macOS 10.11+ 上过滤或搜索 NSCollectionView
Filter or search NSCollectionView on macOS 10.11+
我正在寻找一种方法来过滤 NSCollectionView
中显示的项目。我的 NSCollectionView
使用 10.11 及更高版本的机制进行管理(即使用 NSCollectionViewDataSource
和 NSCollectionViewDelegate
)。我似乎找不到有关如何完成此操作的任何文档。
是否可以为可见项实施过滤器,如果可以,是否有可用的文档向我展示它是如何完成的?
可能有更好的方法,但在此之前,这是我发现不需要修改数据源的解决方法(从概念上讲,这似乎稍微更清晰一些,因为数据在过滤期间不应更改,只是渲染了哪些项目)。
指定 NSCollectionViewDelegateFlowLayout
作为您的 NSCollectionView
代表。然后实现方法collectionView(NSCollectionView, layout: NSCollectionViewLayout, sizeForItemAt: IndexPath)
(docs)。这允许您在集合视图的布局期间指定每个项目的大小。我只是 return 为与当前过滤器字符串不匹配的项目编辑了 0 宽度和高度 CGSize
。否则 return 给定布局的 ItemSize
。在搜索字段的每个操作(例如每次击键)中,我在集合视图上调用 ReloadData()
,这会导致重新布局。
一个问题是您必须将最小项目间距和行间距设置为 0,否则 0 大小的项目仍将获得项目间空间,这会产生间距不均匀的可见项目。
我仍然很想知道更好的方法,所以如果未来的读者有更好的方法,我会更改已接受的答案。
我正在寻找一种方法来过滤 NSCollectionView
中显示的项目。我的 NSCollectionView
使用 10.11 及更高版本的机制进行管理(即使用 NSCollectionViewDataSource
和 NSCollectionViewDelegate
)。我似乎找不到有关如何完成此操作的任何文档。
是否可以为可见项实施过滤器,如果可以,是否有可用的文档向我展示它是如何完成的?
可能有更好的方法,但在此之前,这是我发现不需要修改数据源的解决方法(从概念上讲,这似乎稍微更清晰一些,因为数据在过滤期间不应更改,只是渲染了哪些项目)。
指定 NSCollectionViewDelegateFlowLayout
作为您的 NSCollectionView
代表。然后实现方法collectionView(NSCollectionView, layout: NSCollectionViewLayout, sizeForItemAt: IndexPath)
(docs)。这允许您在集合视图的布局期间指定每个项目的大小。我只是 return 为与当前过滤器字符串不匹配的项目编辑了 0 宽度和高度 CGSize
。否则 return 给定布局的 ItemSize
。在搜索字段的每个操作(例如每次击键)中,我在集合视图上调用 ReloadData()
,这会导致重新布局。
一个问题是您必须将最小项目间距和行间距设置为 0,否则 0 大小的项目仍将获得项目间空间,这会产生间距不均匀的可见项目。
我仍然很想知道更好的方法,所以如果未来的读者有更好的方法,我会更改已接受的答案。