nscollectionViewitem انقر نقرًا مزدوجًا فوق الإجراء؟
-
20-09-2019 - |
سؤال
كيف يمكنني تعيين إجراء عندما ينقر المستخدم المزدوج على NSCollectionViewItem
. NSTableView
, ، على سبيل المثال ، لديه setDoubleAction
طريقة. هل هناك شيء مشابه ل NSCollectionView
?
شكرًا
المحلول
ربما تريد التعامل مع هذا في NSCollectionViewItem
, ، بدلا من NSCollectionView
نفسها (للعمل خارجك NSTableView
القياس).
نصائح أخرى
أعلم أن هذا السؤال قديم ، لكنه يأتي كنتيجة ثالثة على Google في الوقت الحالي ، وقد وجدت طريقة مختلفة ومباشرة للغاية لم أرها موثقة في مكان آخر. (لا أحتاج فقط إلى معالجة العنصر الممثل ، ولكن لديّ عمل أكثر تعقيدًا في تطبيقي.)
NSCollectionView
يرث من NSView
, ، لذلك يمكنك ببساطة إنشاء فئة فرعية مخصصة والتجاوز mouseDown
. هذا لا يخلو تمامًا من المزالق - تحتاج إلى التحقق من عدد النقر ، وتحويل النقطة من النافذة الرئيسية إلى إحداثيات عرض المجموعة ، قبل الاستخدام 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)
...
هذا يبدو كما لو أنني وجدت أخيرًا الطريقة التي تعتزم شركة Apple استخدامها - وإلا ، فلا يوجد سبب لذلك indexPathForItem(at:)
أن تكون موجود.