2017-08-15 122 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尺寸的項目仍會獲得項目間空間,這會產生不均勻間隔的可見項目。

我還是很想知道一個更好的方式,因此,如果未來的讀者有一個,我會改變接受的答案。