ارتباطات الكاكاو: الجمع بين العناصر الثابتة مع عناصر الملائكة الملزمة في nspopuputton
-
12-09-2019 - |
سؤال
أحاول أن أجعل منتقي اللون باستخدام NSPOPPUPBUTTON، وفي الجزء السفلي، أود خيار "مخصص ...". هل من الممكن تحميل الألوان من الصفيف، ثم تك فاصل البند "مخصص" في الأسفل؟ إذا كان الأمر كذلك، كيف؟
شكرا!
المحلول
يجب عليك حقا استخدام nscolorwell. بدلا من صياغة اليد الخاصة بك. أحد الأسباب التي تجعل Apple لديها واجهات غيانية متفوقة من المنصات الأخرى (خاصة Linux) لأن المطورين يستخدمون المكونات القياسية للقيام بهذا النوع من الأشياء. حجج مثل "لأنني أعتقد أنه يجعل الواجهة أكثر موجزة" هي الأسباب التي تجعل الأعرج مثال على كيفية تصميم واجهة المستخدم الرسومية.
ومع ذلك، فإن ما تحاول القيام به هو تحديد قائمة ديناميكية، بدلا من قائمة بحجم ثابت (كمرء قد يقوم به في interfacebuilder). يمكنك القيام بذلك عبر فئات NSMENU و NSMenuitem.
ما عليك القيام به، بدلا من عرض القائمة عند الطلب، هو ملء ذلك عند بدء تشغيل التطبيق مع الصفيف الافتراضي. ثم، عند تغيير الصفيف (عبر كائنات النموذج الخاصة بك) يؤدي إلى إعادة إنشاء القائمة. بدلا من ذلك، فخ القائمة مع menuedsupdate: رسالة.
نصائح أخرى
لقد قمت بإنشاء popupbutton مماثلة، لكنني لم أقم بإرسال الألوان الافتراضية بعد إلى صفيف ثابت (على الرغم من أنني أعمل على ذلك الآن). هناك نوعان من apprauches هنا - كلاهما قد يعتبرون الخارقة من قبل النقيحين، لكنهم يحصلون على المهمة.
Subclass NSPOPUPBUTTONCELL وتجاوز ATHERPOPUPPWITHFRAME لإضافة عناصر القائمة الخاصة بك. لم أحاول هذا بجانب العناصر الملزمة.
الكائنات الصعبة "مخصص .." كائن في صفيفك، والحصول على عمل لوحة اللون المعروضة، إضافة عنصر جديد إلى الصفيف.
هذا ممكن مع الارتباطات اعتبارا من Mac OS X 10.5 باستخدام علامة "موضع المحتوى"؛ انظر إجابتي هنا:
عدم استخدام الارتباطات، لا. يمكنك القيام ب "مخصص ..." واحد بسهولة كافية، ولكن ليس الفاصل.
لماذا لا تستخدم nscolorwell، على أي حال؟
- تكوين الارتباطات الخاصة بك على
NSPopupButton
كل عادة - في تكوين الارتباطات الخاصة بك ل
NSPopupButton
, ، تعيينContent Placement Tag
قيمة1
- في لوحة العمل، قم بتوسيع NSPOPPUPBUTTON وحدد NSMENU المرتبط
NSPopupButton
تأكد من أن لديك عنصرين في القائمة:
اختياري: إضافة عنصر قائمة فاصل بين المحتوى الديناميكي والثابت:
- وضع الخاص بك
ViewController
كما مندوب ل NSMENU اجعلك
ViewController
أNSMenuDelegate
وإضافة التعليمات البرمجية التالية فيViewController
:extension YourViewController: NSMenuDelegate { func menuNeedsUpdate(_ menu: NSMenu) { menu.insertItem(NSMenuItem.separator(), at: menu.numberOfItems-1) } }
والتي ستبادر ببساطة فاصلا بشكل صحيح بين محتوياتك الديناميكية وعنصر القائمة "المخصص ..."