2017-01-10 11 views
0

По какой-то причине, мой NSCollectionView (который использует пользовательский макет, который я написал) называет collectionView(_:didSelectItemsAt:) функции своего делегата, когда я нажимаю элемент, но не тот же делегат collectionView(_:didDeselectItemsAt:), когда я нажимаю от Это.CollectionView (_: didDeselectItemsAt :) никогда не называют

Вот моя основная установка:

class MyCollectionViewContainer: NSViewController { 
    fileprivate lazy var collectionView: NSCollectionView = { 
     let collectionView = NSCollectionView() 
     collectionView.delegate = self 
     collectionView.dataSource = self 

     collectionView.collectionViewLayout = self.customLayout 
     collectionView.isSelectable = true 
     collectionView.allowsEmptySelection = true 
     collectionView.allowsMultipleSelection = false 
    }() 
} 

extension MyCollectionViewContainer: NSCollectionViewDelegate { 

    func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) { 

     print("Selected", indexPaths) 

     // Mutate data to reflect that selection 
    } 

    func collectionView(_ collectionView: NSCollectionView, didDeselectItemsAt indexPaths: Set<IndexPath>) { 
     print("Deselected", indexPaths) 
    } 
} 

«дезактивирует» никогда не печатаются ...:/

+0

Связанный: [NSCollectionView отменить множественный выбор] (https://stackoverflow.com/questions/40472377/nscollectionview-deselect-multiple-selection) –

ответ

0

Так получается, мой макет не добавление какого-либо дополнительный вида типа NSCollectionElementKindInterItemGapIndicator; по-видимому, это представление, которое используется в представлении коллекции, когда вы нажимаете элемент. Моим быстрым решением было добавить один огромный в свой макет, который охватывает весь вид коллекции, и сделать его индекс Z ниже, чем у всех других элементов и дополнительных представлений.

-1

Нам нужно установить NSCollectionView выбранный элемент:

collectionview.isSelectable = true 
+0

Это кажется просто быть строкой кода из моего вопроса –

+0

У меня была такая же проблема с моим кодом, поэтому с помощью приведенного выше кода строки моя проблема решена – user1374

+0

Тогда вы должны задать новый вопрос, разместить свой код и ответить на него это исправление вы нашли. Ваш ответ не помогает моему вопросу. –