سؤال

كيف يمكنني تعيين إجراء عندما ينقر المستخدم المزدوج على NSCollectionViewItem. NSTableView, ، على سبيل المثال ، لديه setDoubleAction طريقة. هل هناك شيء مشابه ل NSCollectionView?

شكرًا

هل كانت مفيدة؟

المحلول

ربما تريد التعامل مع هذا في NSCollectionViewItem, ، بدلا من NSCollectionView نفسها (للعمل خارجك NSTableView القياس).

نصائح أخرى

أعلم أن هذا السؤال قديم ، لكنه يأتي كنتيجة ثالثة على Google في الوقت الحالي ، وقد وجدت طريقة مختلفة ومباشرة للغاية لم أرها موثقة في مكان آخر. (لا أحتاج فقط إلى معالجة العنصر الممثل ، ولكن لديّ عمل أكثر تعقيدًا في تطبيقي.)

NSCollectionView يرث من NSView, ، لذلك يمكنك ببساطة إنشاء فئة فرعية مخصصة والتجاوز mouseDown. هذا لا يخلو تمامًا من المزالق - تحتاج إلى التحقق من عدد النقر ، وتحويل النقطة من النافذة الرئيسية إلى إحداثيات عرض المجموعة ، قبل الاستخدام NSCollectionViewindexPathForItem طريقة:

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:) أن تكون موجود.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top