Pergunta

Como faço para definir uma ação para quando um usuário clica duas vezes em um NSCollectionViewItem. NSTableView, por exemplo, tem o setDoubleAction método. Existe algo semelhante para NSCollectionView?

Obrigado

Foi útil?

Solução

Você provavelmente gostaria de lidar com isso em seu NSCollectionViewItem, em vez do NSCollectionView por si mesmo (para trabalhar com o seu NSTableView analogia).

Outras dicas

Sei que essa pergunta é antiga, mas surge como o terceiro resultado no Google agora, e encontrei um método diferente e muito direto que não vi documentado em outros lugares. (Não preciso apenas manipular o item representado, mas tenho um trabalho mais complexo para fazer no meu aplicativo.)

NSCollectionView herda de NSView, para que você possa simplesmente criar uma subclasse personalizada e substituir mouseDown. Isso não está completamente sem armadilhas - você precisa verificar a contagem de cliques e converter o ponto da janela principal para a coordenada da sua coleção, antes de usar NSCollectionView's indexPathForItem método:

override func mouseDown(with theEvent: NSEvent) {
    if theEvent.clickCount == 2 {
        let locationInWindow = theEvent.locationInWindow
        let locationInView = convert(locationInWindow, from: NSApplication.shared.mainWindow?.contentView)


        if let doubleClickedItem = indexPathForItem(at: locationInView){
        // handle double click - I've created a DoubleClickDelegate 
        // (my collectionView's delegate, but you could use notifications as well)
...

Parece que finalmente encontrei o método que a Apple pretendia ser usada - caso contrário, não há razão para indexPathForItem(at:) existir.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top