NSCOLLECTIONVIELIVEM Ação clique duas vezes?
-
20-09-2019 - |
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
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.