我正在尋找一種方式來過濾在NSCollectionView
顯示的項目。我的NSCollectionView
使用10.11及以上機制進行管理(即使用NSCollectionViewDataSource
和NSCollectionViewDelegate
)。我似乎無法找到有關如何完成的任何文檔。過濾器或搜索NSCollectionView在MacOS 10.11+
是否有可能實現的可視項目的過濾器,如果是的話,是有相關文件證明給我看它是如何做?
我正在尋找一種方式來過濾在NSCollectionView
顯示的項目。我的NSCollectionView
使用10.11及以上機制進行管理(即使用NSCollectionViewDataSource
和NSCollectionViewDelegate
)。我似乎無法找到有關如何完成的任何文檔。過濾器或搜索NSCollectionView在MacOS 10.11+
是否有可能實現的可視項目的過濾器,如果是的話,是有相關文件證明給我看它是如何做?
有可能是一個更好的辦法,但直到沿着這裏來是我發現並不需要修改數據源(這在概念上稍微乾淨看來,作爲數據應該過濾過程中不會改變的解決方法,只是其中項目呈現)。
分配NSCollectionViewDelegateFlowLayout
爲您NSCollectionView
委託。然後執行方法collectionView(NSCollectionView, layout: NSCollectionViewLayout, sizeForItemAt: IndexPath)
(docs)。這允許您在集合視圖的佈局過程中指定每個項目的大小。對於與當前過濾器字符串不匹配的項目,我簡單地返回了0寬度和高度CGSize
。否則返回給定佈局的ItemSize
。在搜索字段的每個動作(例如每個按鍵)上,我在集合視圖上調用,這會導致重新佈局。
與此相關的一個問題是,您必須將最小項目間和行間距設置爲0,否則0尺寸的項目仍會獲得項目間空間,這會產生不均勻間隔的可見項目。
我還是很想知道一個更好的方式,因此,如果未來的讀者有一個,我會改變接受的答案。
如果您在某個項目的相關視圖上設置了isHidden屬性,會發生什麼情況? –
@CharlesSrstka我嘗試了實驗性功能:打電話時'makeItem(withIdentifier:爲:)'創建的項目,如果我設置'isHidden'爲true,視圖不會呈現,但在集合視圖空間仍然爲他們保留本身(即最終只有一個空的矩形,其中隱藏的項目)。 –
啊,那太臭了。令人驚訝的是,因爲這對NSStackView有用。可能要走的路是將數組屬性作爲「已過濾」項目的接收器,並且當您想隱藏某些內容時,將其從收集中移除並放入接收器中。當你想取消隱藏它時,把它從水槽中取出並放回去。 –