2009-10-12 57 views
4

如何爲用戶雙擊NSCollectionViewItem時設置操作。例如,NSTableView具有setDoubleAction方法。是否有類似的NSCollectionView?NSCollectionViewItem雙擊動作?

感謝

+2

這[博客]:http://www.springenwerk.com/2009/12/double-click-and-nscollectionview.html將幫助你。 – user1377049 2012-05-07 14:33:34

回答

2

你可能想在你的NSCollectionViewItem到處理這個問題,而不是NSCollectionView本身(上班了你的NSTableView的比喻)。

+1

謝謝,我最終只是繼承了NSCollectionView的原型NSView並添加了一個mouseDown處理函數。 – indragie 2009-10-12 21:18:23

1

我知道這個問題很古老,但它現在是谷歌的第三個結果,我發現了另一個非常簡單的方法,我沒有在其他地方看到過。 (我不只需要操縱代表的項目,但在我的應用程序中有更復雜的工作。)

NSCollectionView繼承自NSView,因此您可以簡單地創建自定義子類並覆蓋mouseDown。這並非完全沒有缺陷 - 你需要檢查的點擊次數,並在主窗口中您的CollectionView的轉換點座標,使用NSCollectionView的indexPathForItem方法之前:

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) 
... 

這種感覺就好像我終於找到蘋果打算使用的方法 - 否則,indexPathForItem(at :)沒有理由存在。