سؤال

كيف يمكن للمرء أن يتفاعل مع 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];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top