2012-01-05 53 views
0

我有一個NSCollectionView啓動並運行相當不錯的NSArrayController。我的收藏查看項目被配置爲可多選,我對此感到滿意。但是,在集合視圖中發生鼠標拖動事件時,將繪製選擇矩形。如何禁用此選擇矩形繪圖,並仍在我的NSCollectionView中保持多個選擇?謝謝你的幫助!如何禁用NSCollectionView中的選擇矩形繪圖?

+0

我又一次發現了這個問題。我重覆mouseDragged:在我的NSCollectionView子類和我的CollectionViewItem子類。我添加了斷點,並發現在鼠標拖動過程中都不會調用這些斷點。將不得不看看在幕後使用了哪些其他視圖。 – ctpenrose 2012-03-16 07:43:15

+0

所以你只是想多選擇像現在這樣工作,但不顯示任何矩形? – 2012-03-16 19:50:35

+0

我想允許指向並單擊,並且用shift |命令單擊選擇來工作,而不用在拖動上繪製選擇矩形。重寫mouseDragged:沒有幫助。例如,在Apple的Mail.app中,此行爲就是針對其郵件主題集合視圖。 – ctpenrose 2012-03-26 22:34:17

回答

2

NSCollectionView是一個相當不透明的類,沒有太多方法可以輕鬆修改其基本行爲。

拖動操作似乎是由私有方法_performDragFromMouseDown:處理,而不是通過覆蓋mouseDragged:來處理。究竟是什麼私人方法我不確定。

簡單的答案是,除了修改私有方法NSCollectionView之外,您不能更改選擇外觀。

如果您必須修改此行爲,則可能需要使用自定義視圖而不是NSCollectionView

+0

感謝您的回答,我曾嘗試重寫mouseDragged:沒有成功。 – ctpenrose 2012-03-19 17:46:12

0

隨着最新NSCollectionView(2015年發佈的,我認爲?)它呼籲代表viewForSupplementaryElementOfKind來獲取視圖用於繪製選擇矩形。

通過委託比較kind.rawValue"NSCollectionElementKindSelectionRectIndicator"可以「捕獲」這種情況下,和return NSView(),如果你不希望它來繪製

如果要畫它,使用使用"NSCollectionElementKindSelectionRectIndicator"的rawValue手工製成一種/標識符返回collectionView.makeSupplementaryView(ofKind:。自2015年以來,這些類型/標識符已經從枚舉中丟失了,我相信,每次執行NSCollectionView時都會引起我的悲痛。

編輯:我擡頭舊的文章我這個在蘋果開發者論壇提出,我提到我不得不防範numberOfSections == 0,在那種情況下return NSView()