Методы NSCollectionViewDelegate не вызываются - PullRequest
0 голосов
/ 14 июля 2020

У меня есть NSCollectionView, где я хотел бы показать 6 цветовых лунок, представляющих небольшую цветовую палитру. Я установил для него делегата. Я зарегистрировал типы, которые он может перетаскивать, но методы делегата для него не вызываются.

Вот класс, который является моим источником данных и делегатом:

class TileView: NSView, NSCollectionViewDataSource, NSCollectionViewDelegate {
    var currentPalette: ColorPalette = .grayscale
    @IBOutlet var colorPalettePanel: NSPanel? = nil
    @IBOutlet var colorCollection: NSCollectionView? = nil

    override func awakeFromNib() {
        colorCollection?.registerForDraggedTypes([NSPasteboard.PasteboardType.color])
        colorCollection?.setDraggingSourceOperationMask(NSDragOperation.move, forLocal: true)
    }

    override func draw(_ dirtyRect: NSRect) {
        let context = NSGraphicsContext.current?.cgContext
        draw(into: context)
    }

    // MARK: - Collection View Data Source Methods
    func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
        return 6
    }

    func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
        let colorIndex = indexPath.last
        let result = ColorCollectionViewItem(nibName: "ColorCollectionViewItem", bundle: Bundle.main, colorIndex: colorIndex!)
        let color = gCustomPalette6 [ colorIndex! ]
        result.colorWell?.color = NSColor(cgColor: color)!
        return result
    }
    
    // MARK: - Collection View Delegate Methods
    func collectionView(_ collectionView: NSCollectionView, validateDrop draggingInfo: NSDraggingInfo, proposedIndex proposedDropIndex: UnsafeMutablePointer<Int>, dropOperation proposedDropOperation: UnsafeMutablePointer<NSCollectionView.DropOperation>) -> NSDragOperation {
        print("dragging Info = \(draggingInfo), proposed drop operation = \(proposedDropOperation)")
        return NSDragOperation.move
    }

    func collectionView(_ collectionView: NSCollectionView, acceptDrop draggingInfo: NSDraggingInfo, index: Int, dropOperation: NSCollectionView.DropOperation) -> Bool {
        if dropOperation == .before {
            return true
        }
        
        return false
    }

    func collectionView(_ collectionView: NSCollectionView, canDragItemsAt indexes: IndexSet, with event: NSEvent) -> Bool {
        return true
    }

    func collectionView(_ collectionView: NSCollectionView, draggingSession session: NSDraggingSession, willBeginAt screenPoint: NSPoint, forItemsAt indexPaths: Set<IndexPath>) {
        print("dragging session = \(session)")
    }
}

Я установил делегат в Interface Builder, но ни один из методов делегата никогда не вызывается.

Мой объект делегата также является источником данных, и все методы источника данных вызываются должным образом. Источник данных также настраивается в Интерфейсном Разработчике. Что еще мне нужно сделать?

...