mainmenu القابلة للاستخدام عند عرض الورقة
-
01-10-2019 - |
سؤال
كيف يمكن للمرء أن يتفاعل مع menuitems التي يتم النقر عليها عبر الماوس أو الاحتجاج بها عبر لوحة المفاتيح ، على سبيل المثال: CMD+Q؟
[NSApp beginSheet:my_sheet ...arguments... ];
/*
The sheet is now shown and the mainmenu isn't usable.
How does one make it usable?
*/
[NSApp endSheet:my_sheet returnCode:0];
المحلول
أفترض أنك تستخدم NSAPP -beginSheet:modalForWindow:modalDelegate:didEndSelector:contextInfo:
طريقة. إذا كان الأمر كذلك ، فعليك بالفعل أن تكون قادرًا على القيام بأوامر القائمة. تقوم هذه الطريقة بتشغيل مشروط الورقة للنافذة المحددة فقط (على عكس الوسائط للتطبيق بأكمله). ومع ذلك ، إذا اتصلت أيضًا بـ NSAPP's -runModalForWindow:
, ، ثم سيكون مشروط التطبيق بأكمله. لذا ، على افتراض أنك لا تتصل بذلك ، يجب أن تعمل أوامر Windows و Menu الأخرى بشكل جيد عندما تظهر الورقة.
ومع ذلك ، فإن عنصر قائمة "الإقلاع" هو استثناء واحد. لن يتيح لك الإقلاع عن التدخين لأن هناك جلسة مشروطة نشطة لنافذة ، والتي يفترض أنه يجب التعامل معها قبل أن يترك التطبيق. إذا كان هذا هو ما تحاول فعله حقًا ، فإن أحد الحلول الممكنة هو الفئة الفرعية NSApplication
وتجاوزها -terminate:
طريقة لإغلاق الورقة الخاصة بك أولاً (إذا كانت مفتوحة). أولاً ، تحتاج إلى صنع فئة فرعية من NSApplication
, ، واطلب من تطبيقك استخدامه عن طريق إعداده في "mainmenu.xib" و as Principal Class
في "info.plist"). ثم أضف شيئًا كهذا إلى فئتك الفرعية:
- (void)terminate:(id)sender
{
// First close the sheet (if it's active), using whatever method
// you have set up to do this...
[((MyAppDelegate*)[self delegate]) closeSheet:self];
// Now call the normal implementation
[super terminate:sender];
}