Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在macOS 10.11+;_Macos_Cocoa_Osx Elcapitan_Nscollectionview - Fatal编程技术网

在macOS 10.11+;

在macOS 10.11+;,macos,cocoa,osx-elcapitan,nscollectionview,Macos,Cocoa,Osx Elcapitan,Nscollectionview,我正在寻找一种方法来过滤NSCollectionView中显示的项目。我的NSCollectionView使用10.11及以上机制(即使用NSCollectionViewDataSource和NSCollectionViewDelegate)进行管理。我似乎找不到任何关于如何做到这一点的文档 是否可以为可见项实现筛选器?如果可以,是否有文档可以向我展示如何实现该筛选器?可能有更好的方法,但在此之前,我发现了一种不需要修改数据源的解决方法(从概念上讲,这似乎更清晰一些,因为数据在过滤过程中不应该改

我正在寻找一种方法来过滤
NSCollectionView
中显示的项目。我的
NSCollectionView
使用10.11及以上机制(即使用
NSCollectionViewDataSource
NSCollectionViewDelegate
)进行管理。我似乎找不到任何关于如何做到这一点的文档


是否可以为可见项实现筛选器?如果可以,是否有文档可以向我展示如何实现该筛选器?

可能有更好的方法,但在此之前,我发现了一种不需要修改数据源的解决方法(从概念上讲,这似乎更清晰一些,因为数据在过滤过程中不应该改变,只需要呈现哪些项目)

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

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


我仍然很想知道一个更好的方法,因此如果未来的读者有一个,我将更改接受的答案。

如果在项目的一个关联视图上设置isHidden属性,会发生什么情况?@CharlesSrstka我尝试了这个经验:调用
makeItem(标识符:for:)
要创建项目,如果我将
ishiden
设置为true,则不会呈现视图,但在集合视图本身中仍为它们保留空间(即,在隐藏项目所在的位置,您只会得到一个空矩形).啊,这太糟糕了。这也让人惊讶,因为它确实适用于NSStackView。接下来的方法可能是将数组属性作为“筛选”的接收器项目,当您要隐藏某个内容时,请将其从集合中删除并放入接收器。当您要取消隐藏时,请将其从接收器中取出并放回。使用经过筛选的浅表数据副本,如
NSArrayController
does。