سؤال

انا لدي NSTableView وهو ما أرغب في السماح للمستخدمين بسحب ملفات الفيديو. عندما يسقطون الملف ، سيتم إضافته كصف في عرض الجدول.

كيف لي أن تذهب عن القيام بذلك؟ حاليًا يأخذ TableView بياناته من وحدة تحكم صفيف (التي تأخذ بياناتها من NSMutableArray)

وجدت هذه الوثائق ، ولكن لا يمكن أن تجعلها تعمل ..

أملك..

  • صنعت فئة "Tablecon" (التي غيرت إلى ورثها من NstableView ، وليس nsobject)
  • غيرت فئة NstableView إلى TableCon
  • قم بتعيين منفذ مندوب NstableView على تلك الفئة
  • اتصل registerForDraggedTypes في Tablecon's Init
  • مُنفّذ - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender; (مرة أخرى في Tablecon)

.. ولكن ، لا شيء ، إنه يتصرف مثلما لم أغير أي شيء (لا أخطاء) ، ماذا أفعل خطأ؟

يحرر: لقد حاولت تنفيذ اقتراح Boaz Stuller ، ووجدت أيضًا هذه وصف الحل ( الرد الأول يتضمن حل المنشور الأول). إذن ما فعلته الآن هو ..

  • الفئة الفرعية nsarrayController التي تغذي المحتوى لعرض الجدول (tablelistcon)
  • يضيف tableView منفذ إلى TableListcon (وأشار إليه في NstableView)
  • تنفيذ التحقق من صحة ، و constrowswithindexes ، و acceptDrop في TableListCon
  • دعا registerfordraggedtypes على منفذ TableView.

مرة أخرى ، لا توجد أخطاء/تحذيرات ، ولكن يبدو أن طريقة AWAKEFROMNIB فقط تسمى (لا تسمى أي من الطرق الأخرى)

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

المحلول

يعالج NstableView السحب والإفلات بشكل مختلف عن المشاهدات العامة ، وهو أمر جيد بشكل عام. هذا يعني أنه ليس عليك التعامل يدويًا مع التعليق المعقد وتتبع الخلايا وإدخال السلوكيات التي تتطلبها الجداول.

يمكن العثور على وصف لما هو مطلوب هنا. في الأساس ، لا يزال بإمكانك الاتصال -registerDraggedTypes: (بشكل عام في طريقة -awakekfromnib) ولكن بدلاً من تنفيذ طرق NSDraggingDestation ، يمكنك تنفيذ طرق مصدر البيانات المختلفة المرتبطة بالسحب والإفلات ، والتي يمكن العثور عليها هنا. يجب ألا تحتاج إلى فئة NstableView الفرعية لتنفيذ السحب والإفلات بهذه الطريقة.

لاحظ أن هذه هي طرق مصدر البيانات. تحتاج إلى توصيل منفذ مصدر البيانات الخاص بعرض الجدول إلى الفصل الذي ينفذ تلك الطرق حتى يتم استدعاؤهم.

نصائح أخرى

بالإضافة إلى ما قاله Boaz ، يبدو أنك تقوم بإنشاء فئة فرعية NstableView ثم صنع مثيلًا لتلك الفئة الفرعية مندوب NstableView. إذا كنت ستذهب إلى الفئة الفرعية ، فيجب استخدام هذه الفئة الفرعية بدلاً من NstableView ، وليس بالإضافة إلى ذلك. أيضًا ، إنه دائمًا ما يكون انتهاكًا للمخاوف بأن يكون وجهة نظر مندوب لكائن آخر.

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