من الناحية البرمجية ، قم بتثبيت nspopupbuttoncell في Cocoa OSX

StackOverflow https://stackoverflow.com/questions/1925737

  •  20-09-2019
  •  | 
  •  

سؤال

لدي واجهة OpenGL GUI وأحتاج إلى قائمة منبثقة سيتم استدعاؤها عندما يتم الضغط على زر معين في شاشة OpenGL الخاصة بي. أرغب في عرض قائمة مشابهة لقائمة تشبه القائمة التي تنبثق عند الضغط على nspopupbutton ولكن لا يمكنني استخدام زر الكاكاو نفسه. يبدو أن أفضل طريقة لإنجاز هذا هي استخدام nspopupbuttoncell. لا يمكنني نشر الكود الخاص بي هنا لأنني أكتب الرمز في Lisp والوصول إلى الكاكاو من خلال جسر C الموضوعي ، لكنني أردت فقط معرفة ما إذا كان رمز Pseduo التالي يبدو أنه يجب أن يعرض القائمة أو إذا كان هناك عيب واضح في بلدي منطق:

• Pseudo Code for function that is called when button is pressed:
• Initialize an NSPopUpButtonCell Using initTextCell: "test" pullsDown: NO
• allocate an NSMenu using alloc
• add two menu items using addItem:
• set the menu of the popUpButtonCell to be the menu that was just allocated using setMenu:
• Next I tried two methods to try and get the menu to actually be displayed,
  first I tried using drawWithFrame:inView: and when that did not work I also tried 
  using drawBezelWithFrame:inView: eventhough the docs said not to use but I just 
  tried it out of desperation.
• finally, when the draw methods did not work I tried using performClick: on the 
  popupButtonCell to try and simulate the click.

لم تنجح أي من هذه الطرق في الحصول على أي نوع من القائمة ليتم عرضها. هل هناك طريقة أخرى لإطفاء البرامج في القائمة الموجودة في الخلية؟

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

المحلول

أعتقد أنك تبحث عن trackMouse:inRect:ofView:untilMouseUp: طريقة NSCell

[theCell trackMouse:[NSApp currentEvent] inRect:NSZeroRect ofView:theView untilMouseUp:YES];

نصائح أخرى

أعتقد أنك ستكون أفضل حالًا باستخدام سهل NSMenu والاتصال +[NSMenu popUpContextMenu:withEvent:forView:]. إذا كنت تستهدف 10.6 فقط وبعد ذلك ، يمكنك أيضًا التحقق من ذلك -[NSMenu popUpMenuPositioningItem:atLocation:inView:], ، مما يمنحك المزيد من التحكم في وضع القائمة. مجرد تنفيذ mouseDown: في عرضك ، قم بإنشاء قائمة (أو قم بتحميلها من ملف NIB) ، وعرضها ، و NSMenu يجب أن تعتني بكل التفاصيل من هناك. فقط تأكد من أن الهدف والعمل لكل منهما NSMenuItem يتم تعيينه بحيث يتم استدعاء طريقة الإجراء بشكل صحيح عند تحديد عنصر.

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