كيفية إضافة عناصر قائمة متعددة مع نفس العنوان إلى nspopupbutton (nsmenu)؟

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

سؤال

كما تقول المستندات أنه من المستحيل إضافة عنصرين للقائمة إلى nspopupbutton إذا كان لهما نفس العنوان. كنت أحاول إضافة عناصر القائمة إلى [قائمة Popupbutton] ، ولكن بدون حظ. كنت أحاول أيضًا إنشاء قائمة جديدة وإضافة عناصر إليها ثم استخدم [Popupbutton setmenu: Newmenu] ، ولكن لا. القائمة دائما عرض عنصر واحد فقط لكل اسم.

لكنني أعلم أنه يجب أن يكون ذلك ممكنًا ، إذا حاولت إنشاء قائمة تشغيل ذكية في iTunes ، فيمكنك تحديد "قائمة التشغيل" من زر المنبثقة اليسرى "=" من الوسط ، وستعقد القائمة اليمنى لكل قائمة تشغيل في iTunes حتى لو كان لديهم نفس العنوان. اذا كيف عملوها؟

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

المحلول

واجهت المشكلة الدقيقة وتم حلها بسهولة. بدلا من استخدام nspopupbutton طرق مثل -DDITEMWITHTITLE: لمعالجة عناصر الزر ، أضفت ملف nsarrayController وأضاف العناصر في وحدة تحكم الصفيف بدلاً من ذلك. ثم استخدمت الارتباطات لربط وحدة التحكم وزر المنبثقة والآن يعرض العناصر ذات العناوين نفسها.

للقيام بالروابط:

  1. إضافة nsarrayController في IB.
  2. تعيين nspopupbutton روابط ل "المحتوى" إلى وحدة تحكم مع ""مفتاح وحدة التحكم" مستخدم "OrderObjects"
  3. تعيين nspopupbutton روابط ل "فهرس محدد" إلى وحدة تحكم مع "مفتاح وحدة التحكم" مستخدم "SelectionIndex"
  4. اختياري] حدد وحدة تحكم الصفيف وضبط اسم الفصل في السمات على أي فئة فئة العناصر الخاصة بك على سبيل المثال NSString أو يمكنك استخدام الافتراضي nsmutabletichary وأضف مفاتيح في المربع أدناه والتي تتيح لك بالتالي لف العوامل الخاصة بك في القاموس وإضافة مفاتيح مختلفة لما تريد عرضه في زر popup وما تريد أن يكون في الخلفية. لتعيين أي مفتاح القاموس الذي تريد أن تنعكس في الزر المنبثق ، انتقل إلى روابط زر popup "المحتوى" مرة أخرى وضبط "مسار المفتاح المشروط" إلى المفتاح الذي أضفته في سمة وحدة تحكم الصفيف.

نصائح أخرى

في حين أن أساليب nspopupbutton مثل additemwithtitle: و addmenu: لن تسمح بأسماء مكررة ، من الممكن بالتأكيد أن يكون لديك عناصر تحمل نفس العنوان. عليك ببساطة تعيين الاسم على nsmenuitem نفسه.

على سبيل المثال ، إذا كان لديك مجموعة من الأوتار (مثل أسماء قائمة التشغيل ربما) ، فأنت تريد إضافتها إلى زر منبثقة ، وتريد التأكد من أن التكرارات ستكون موجودة هناك ، فافعلها مثل هذا:

NSArray* items = [NSArray arrayWithObjects:@"Foo", @"Bar", @"Baz", @"Foo", nil];

for (NSString* item in items)
{
   [popupButton addItemWithTitle:@"blah"];
   [[popupButton lastItem] setTitle:item];
   [[popupButton lastItem] setTarget:self];
   [[popupButton lastItem] setAction:@selector(something:)];
}

بدلا من استخدام addItemWithTitle:, ، يمكنك إنشاء nsmenuitem يدويًا وإضافته مباشرة إلى القائمة. يتيح لك ذلك تحديد أي عنوان تريده ، بالإضافة إلى القدرة على إدراجه في أي مكان في القائمة.

NSMenuItem* newItem = [[NSMenuItem alloc] initWithTitle:@"foo" action:@selector(something:) keyEquivalent:@""];

[newItem setTarget:self];
[[popupButton menu] addItem:newItem];
[newItem release];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top