2017-08-15 126 views
0

我正在寻找一种方式来过滤在NSCollectionView显示的项目。我的NSCollectionView使用10.11及以上机制进行管理(即使用NSCollectionViewDataSourceNSCollectionViewDelegate)。我似乎无法找到有关如何完成的任何文档。过滤器或搜索NSCollectionView在MacOS 10.11+

是否有可能实现的可视项目的过滤器,如果是的话,是有相关文件证明给我看它是如何做?

+0

如果您在某个项目的相关视图上设置了isHidden属性,会发生什么情况? –

+0

@CharlesSrstka我尝试了实验性功能:打电话时'makeItem(withIdentifier:为:)'创建的项目,如果我设置'isHidden'为true,视图不会呈现,但在集合视图空间仍然为他们保留本身(即最终只有一个空的矩形,其中隐藏的项目)。 –

+0

啊,那太臭了。令人惊讶的是,因为这对NSStackView有用。可能要走的路是将数组属性作为“已过滤”项目的接收器,并且当您想隐藏某些内容时,将其从收集中移除并放入接收器中。当你想取消隐藏它时,把它从水槽中取出并放回去。 –

回答

0

有可能是一个更好的办法,但直到沿着这里来是我发现并不需要修改数据源(这在概念上稍微干净看来,作为数据应该过滤过程中不会改变的解决方法,只是其中项目呈现)。

分配NSCollectionViewDelegateFlowLayout为您NSCollectionView委托。然后执行方法collectionView(NSCollectionView, layout: NSCollectionViewLayout, sizeForItemAt: IndexPath)docs)。这允许您在集合视图的布局过程中指定每个项目的大小。对于与当前过滤器字符串不匹配的项目,我简单地返回了0宽度和高度CGSize。否则返回给定布局的ItemSize。在搜索字段的每个动作(例如每个按键)上,我在集合视图上调用​​,这会导致重新布局。

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

我还是很想知道一个更好的方式,因此,如果未来的读者有一个,我会改变接受的答案。